Saya punya pertanyaan tentang salah satu fitur c ++ 20, inisialisasi yang ditunjuk (info lebih lanjut tentang fitur ini di sini )
#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}};
}
Kode ini dikompilasi dengan gcc 9.2.0 dan -Wall -Wextra -std=gnu++2aflag.
Seperti yang Anda lihat di atas, kedua struct, Persondan Employeemerupakan agregat tetapi inisialisasi Employeeagregat tidak mungkin menggunakan inisialisasi yang ditunjuk.
Bisakah seseorang menjelaskan mengapa?
publicatau privatesetiap waktu ... terima kasih
structmewarisi ke publik secara default
struct Employee : public Person