>백엔드 개발 >C++ >생성자의 멤버 이니셜라이저 목록에서 배열을 초기화할 수 있습니까?

생성자의 멤버 이니셜라이저 목록에서 배열을 초기화할 수 있습니까?

DDD
DDD원래의
2024-11-18 11:21:02497검색

Can Arrays Be Initialized in a Constructor's Member Initializer List?

생성자의 멤버 배열 초기화

다음 C 클래스를 고려하세요.

class C {
public:
    C() : arr({1, 2, 3}) {}
    // C() : arr{1, 2, 3} {}
private:
    int arr[3];
};

코드는 생성자의 멤버 이니셜라이저 목록에 배열 멤버가 있습니다. 그런데 컴파일에 실패합니다.

질문:

  1. 생성자의 멤버 이니셜라이저 목록에서 배열을 초기화할 수 있나요?
  2. C 03 표준에서는 이 상황에 대해 무엇을 기술하고 있습니까?
  3. C 11 목록 초기화로 이 문제가 해결됩니까?

답변:

1. 생성자의 배열 초기화

예, 생성자의 멤버 초기화 목록에서 배열을 초기화하는 것이 가능합니다. 그러나 중간 구조가 필요합니다:

struct A {
    int foo[3];
    A(int a, int b, int c) : foo{a, b, c} {}
};

class C {
public:
    C() : foo(A(1, 2, 3)) {}
private:
    A foo;
};

2. C 03 표준

C 03 표준은 멤버 이니셜라이저 목록의 배열 초기화를 명시적으로 다루지 않습니다. 그러나 직접 초기화의 일반 규칙은 중괄호를 사용하여 배열을 초기화하는 것을 금지합니다.

3. C 11 목록 초기화

C 11에서는 중괄호를 사용하여 배열을 직접 초기화할 수 있는 목록 초기화를 도입했습니다.

class C {
public:
    C() : arr{1, 2, 3} {}
private:
    int arr[3];
};

이 경우 배열 이름 바로 뒤에 중괄호를 사용하는 구문이 사용됩니다. 유효하며 생성자의 멤버 초기화 목록에서 배열을 초기화합니다.

위 내용은 생성자의 멤버 이니셜라이저 목록에서 배열을 초기화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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