ฉันมีคำถามเกี่ยวกับหนึ่งในคุณสมบัติ c ++ 20 ซึ่งเป็น initializers ที่กำหนด (ข้อมูลเพิ่มเติมเกี่ยวกับคุณลักษณะนี้ที่นี่ )
#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
รวมได้โดยใช้ initializers ที่กำหนด
มีคนอธิบายได้ไหมทำไม
public
หรือprivate
ทุกครั้ง ... ขอบคุณอยู่ดี
struct
สืบทอดต่อสาธารณชนเป็นค่าเริ่มต้น
struct Employee : public Person