मुझे c ++ 20 फीचर में से एक के बारे में एक प्रश्न मिला है, नामित इनिशियलाइज़र (इस फ़ीचर के बारे में अधिक जानकारी यहाँ )
#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}};
}
इस कोड को 9.2.0 और -Wall -Wextra -std=gnu++2aझंडे के साथ संकलित किया गया था ।
जैसा कि आप ऊपर देख सकते हैं, दोनों संरचनाएं, Personऔर Employeeसमुच्चय हैं , लेकिन Employeeनिर्दिष्ट आरंभकों का उपयोग करते हुए कुल एकत्रीकरण संभव नहीं है।
कोई मुझे समझा सकता है क्यों?
publicया privateहर बार ... धन्यवाद वैसे भी
structडिफ़ॉल्ट रूप से सार्वजनिक रूप से विरासत में
struct Employee : public Person