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

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

Barbara Streisand
풀어 주다: 2024-11-29 02:07:08
원래의
520명이 탐색했습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿