>  기사  >  백엔드 개발  >  C 0x에서 초기화 목록을 사용하여 멤버 배열을 초기화하는 방법은 무엇입니까?

C 0x에서 초기화 목록을 사용하여 멤버 배열을 초기화하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-02 17:25:29809검색

How to Initialize Member Arrays with Initializer Lists in C  0x?

초기화 목록을 사용하여 멤버 배열 초기화

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.