>백엔드 개발 >C++ >멤버 이니셜라이저 목록에서 배열 멤버를 초기화하는 방법은 무엇입니까?

멤버 이니셜라이저 목록에서 배열 멤버를 초기화하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-29 02:07:08606검색

How to Initialize an Array Member in a Member Initializer List?

멤버 이니셜라이저 목록에서 배열 멤버를 초기화하는 방법

소개

멤버 이니셜라이저 목록의 배열 멤버는 간단한 작업처럼 보일 수 있지만 실제로는 어려울 수 있습니다. 이 기사에서는 다양한 접근 방식을 살펴보고 이 주제와 관련된 일반적인 질문에 답할 것입니다.

문제 및 코드

다음 코드 조각은 생성자의 초기화 프로그램에서 배열 멤버를 초기화하려고 시도합니다. list:

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

그러나 코드가 컴파일되지 않습니다. 그 이유는 다음과 같이 할당 연산자 =를 사용해서만 배열을 초기화할 수 있기 때문입니다.

int arr[3] = {1,3,4};

Solutions

  • 구조체 사용:

한 가지 해결책은 구조체를 사용하여 다음을 수행하는 것입니다. 배열을 캡슐화하여 생성자에서 초기화할 수 있도록 합니다. 이는 본질적으로 Boost.Array 라이브러리가 수행하는 작업입니다.

  • 목록 초기화 사용:

C 11에서는 다음 작업에 사용할 수 있는 목록 초기화를 도입합니다. 멤버 이니셜라이저 목록에서 배열을 초기화합니다. 다음 코드가 작동합니다.

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

C 03

C 03 표준은 생성자 이니셜라이저의 집계(배열 포함) 초기화를 구체적으로 다루지 않습니다. 원본 코드의 무효성은 배열에 대한 이니셜라이저 목록의 사용을 금지하는 직접 초기화 규칙의 결과입니다.

C 11

C 11의 목록 초기화 구문은 멤버 이니셜라이저 목록의 배열 초기화를 단순화합니다. 하지만 위와 같이 올바른 구문을 사용하는 것이 중요합니다.

위 내용은 멤버 이니셜라이저 목록에서 배열 멤버를 초기화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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