이니셜라이저 목록을 사용하여 멤버 배열을 초기화하려고 시도하는 동안 컴파일러 오류가 발생합니다. 할당에서 호환되지 않는 유형 'std::initializer_list
초기화 목록 생성자 대신 가변 변수를 선택할 수 있습니다. 템플릿 생성자:
<code class="cpp">struct Foo { int x[2]; template <typename... Ts> Foo(Ts... ts) : x{ts...} {} };</code>
이 접근 방식을 사용하면 다음과 같이 Foo 객체를 초기화할 수 있습니다.
<code class="cpp">Foo f1(1, 2); // OK Foo f2{1, 2}; // Also OK Foo f3(42); // OK; x[1] zero-initialized Foo f4(1, 2, 3); // Error: too many initializers</code>
불변성이 필수가 아닌 경우 생성자에서 초기화를 건너뛴 후 함수 본문 내에서 배열을 초기화할 수 있습니다.
<code class="cpp">struct Foo { int x[2]; // or std::array<int, 2> x; Foo(std::initializer_list<int> il) { std::copy(il.begin(), il.end(), x); // or std::copy(il.begin(), il.end(), x.begin()); // or x.fill(il.begin()); } }</code>
그러나 이 방법에는 가변 템플릿에서 제공하는 컴파일 시간 범위 검사가 부족합니다. 생성자.
위 내용은 초기화 목록을 사용하여 C 멤버 배열을 초기화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!