C 20의 지정 이니셜라이저: 제한 사항 설명
C 20에 도입된 지정 이니셜라이저를 사용하면 집계에 대한 멤버 초기화 순서를 명시적으로 지정할 수 있습니다. . 그러나 파생 클래스에 대한 사용과 관련하여 최근 질문이 제기되었습니다.
제공된 코드 예제에서:
<code class="cpp">struct Person { std::string name{}; std::string surname{}; unsigned age{}; }; struct Employee : Person { unsigned salary{DEFAULT_SALARY}; }; int main() { Employee e1{.name{"John"}, .surname{"Wick"}, .age{40}, .salary{50000}}; // doesn't compile Employee e2 {.salary{55000}}; // warning: missing initializer for base class member }</code>
지정된 초기화는 초기화에만 사용할 수 있으므로 코드는 e1을 컴파일하지 못합니다. 파생 클래스의 비정적 멤버를 직접 사용합니다. 즉, 지정된 초기화 프로그램을 사용하여 기본 클래스의 멤버를 직접 초기화할 수 없습니다.
이 문제를 해결하려면 다음 접근 방식을 사용할 수 있습니다.
기존 목록 초기화:
<code class="cpp">Employee e1{ "John", "Wick", 40, 50000 };</code>
중첩된 지정 초기화 목록:
<code class="cpp">Employee e1{ { .name{"John"}, .surname{"Wick"}, .age{40} }, 50000 };</code>
또는 @Jarod42가 제안한 대로 초기화 목록을 지정할 수도 있습니다. 기본 클래스의 경우 명시적으로:
<code class="cpp">Employee e1{ { .name{"John"}, .surname{"Wick"}, .age{40} }, .salary{50000} };</code>
이를 사용하면 지정된 초기화 프로그램을 사용하여 직접 기본 클래스 멤버와 파생 클래스 멤버를 모두 초기화할 수 있습니다.
위 내용은 C 20에서 기본 클래스 멤버를 초기화하는 데 지정된 초기화 프로그램을 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!