> 백엔드 개발 > C++ > 본문

C 20 집계에서 상속된 멤버를 초기화하는 데 지정된 초기화 프로그램을 사용할 수 있습니까?

Patricia Arquette
풀어 주다: 2024-10-29 02:44:02
원래의
415명이 탐색했습니다.

Can Designated Initializers be Used to Initialize Inherited Members in C  20 Aggregates?

C 20의 지정 이니셜라이저 및 집계

C 20에서 지정 이니셜라이저는 멤버를 명시적으로 지정하여 집계 유형을 초기화하는 간결한 방법을 제공합니다. 초기화됩니다. 그러나 이 구문에는 상속된 클래스를 초기화할 때 제한이 있습니다.

다음 코드 조각을 고려하세요.

<code class="cpp">struct Person {
    std::string name;
    std::string surname;
    unsigned age;
};

struct Employee : Person {
    unsigned salary;
};</code>
로그인 후 복사

Person과 Employee는 모두 집계이지만 다음을 사용하여 Employee를 초기화하려는 시도는 다음과 같습니다. 지정 이니셜라이저가 실패합니다.

<code class="cpp">Employee e1{.name{"John"}, .surname{"Wick"}, .age{40}, .salary{50000}};</code>
로그인 후 복사

이는 C 표준에서 지정 이니셜라이저를 클래스의 직접 비정적 데이터 멤버를 초기화하는 데만 사용할 수 있다고 지정하기 때문입니다. 위의 예에서 Salal은 직접 기본 클래스 Person이 아닌 파생 클래스 Employee의 멤버이므로 지정된 초기화는 허용되지 않습니다.

대신 상속된 멤버를 초기화하려면 기존 목록 초기화를 사용해야 합니다.

<code class="cpp">Employee e1{ "John", "Wick", 40, 50000 };</code>
로그인 후 복사

또는 주석에서 지적한 대로 중첩된 지정 초기화 목록을 사용하여 기본 클래스를 초기화할 수 있습니다.

<code class="cpp">Employee e1{ { .name{"John"}, .surname{"Wick"}, .age{40} }, 50000 };</code>
로그인 후 복사

이 경우 직접 기본 클래스가 초기화됩니다. 지정된 초기화 목록을 사용하고, Employee 클래스 전체는 일반 초기화 목록을 사용하여 초기화됩니다.

위 내용은 C 20 집계에서 상속된 멤버를 초기화하는 데 지정된 초기화 프로그램을 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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