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