지정된 초기화 프로그램 인 C ++ 20 기능 중 하나에 대한 질문이 있습니다 (이 기능에 대한 자세한 정보는 here ).
#include <iostream>
constexpr unsigned DEFAULT_SALARY {10000};
struct Person
{
std::string name{};
std::string surname{};
unsigned age{};
};
struct Employee : Person
{
unsigned salary{DEFAULT_SALARY};
};
int main()
{
std::cout << std::boolalpha << std::is_aggregate_v<Person> << '\n'; // true is printed
std::cout << std::boolalpha << std::is_aggregate_v<Employee> << '\n'; // true is printed
Person p{.name{"John"}, .surname{"Wick"}, .age{40}}; // it's ok
Employee e1{.name{"John"}, .surname{"Wick"}, .age{40}, .salary{50000}}; // doesn't compile, WHY ?
// For e2 compiler prints a warning "missing initializer for member 'Employee::<anonymous>' [-Wmissing-field-initializers]"
Employee e2 {.salary{55000}};
}
이 코드는 gcc 9.2.0 및 -Wall -Wextra -std=gnu++2a
플래그 로 컴파일되었습니다 .
위에서 볼 수 있듯이 두 구조체 Person
와 Employee
집계는 모두 있지만 Employee
지정된 초기화 프로그램을 사용하여 집계를 초기화 할 수는 없습니다.
누군가 왜 나에게 설명 할 수 있습니까?
public
거나 private
때마다 ... 감사 어쨌든
struct
기본적으로 공공의 상속
struct Employee : public Person