C 0x에서 초기화 목록을 사용하여 멤버 배열을 초기화하려고 하면 "할당에 호환되지 않는 유형" 오류가 발생할 수 있습니다. .
이 문제를 해결하려면 가변 템플릿 생성자를 대신 사용하는 것이 좋습니다.
<code class="cpp">struct foo { int x[2]; template <typename... T> foo(T... ts) : x{ts...} {} }; int main() { // Usage 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 foo f5(3.14); // Error: narrowing conversion not allowed foo f6("foo"); // Error: no conversion from const char* to int }</code>
'const' 상태를 유지하는 것이 필수적이지 않은 경우 대안으로 배열 값을 로드하는 함수를 사용할 수 있습니다. :
<code class="cpp">struct foo { int x[2]; foo(std::initializer_list<int> il) { std::copy(il.begin(), il.end(), x); } };</code>
그러나 이 접근 방식은 컴파일 시간 범위 검사를 포기합니다.
위 내용은 C 0x에서 초기화 목록을 사용하여 멤버 배열을 초기화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!