Designated initializers in C++20

后端 未结 2 1518
我在风中等你
我在风中等你 2020-12-20 11:02

I\'ve got a question about one of the c++20 feature, designated initializers (more info about this feature here)

#include 

constexpr unsigne         


        
2条回答
  •  猫巷女王i
    2020-12-20 11:34

    According to the C++ 20 Standard (9.3.1 Aggregates. p. #3)

    (3.1) — If the initializer list is a designated-initializer-list, the aggregate shall be of class type, the identifier in each designator shall name a direct non-static data member of the class, and the explicitly initialized elements of the aggregate are the elements that are, or contain, those members.

    So you may not use the designated initializer list to initialize data members of base classes.

    Use instead the usual list initialization like

    Employee e1{ "John", "Wick", 40, 50000 };
    

    or

    Employee e1{ { "John", "Wick", 40 }, 50000 };
    

    or as @Jarod42 pointed in a comment you can write

    Employee e1{ { .name{"John"}, .surname{"Wick"}, .age{40} }, 50000 };
    

    In this case the direct base class is initialized by a designated initializer list while the class Employe in whole is initialised by a non-designated initializer list.

提交回复
热议问题