《C++程序设计语言》第四版第17.3.1章节。"we can initializate objects of a class for which we have not define any constructor using:
- memberwise initialization.
- copy initialization.
- default initialization.
For example:
struct Work { string author; string name; int year; }; Work s9 { "Bethoven", "Symphony No. 9 in D minor, Op. 125; Choral", 1824 }; // memberwise initialization Work currently_playing {s9}; // copy initialization Work none {}; // default initialization
例如:
struct Data
{
int mMember1;
float mMember2;
char mMember3;
};
int main()
{
Data aData_1{1,0.3,33};
Data aData_2{aData_1};
return EXIT_SUCCESS;
}
尽管我无论使用GCC还是Clang都会遇到编译器错误,但这必须可行。在两个编译器中,错误信息都是“无法将Data转换为int”。然而,实现复制构造函数可以使此错误消失,或者使用圆括号语法而不实现它也可以。问题有点愚蠢,将花括号更改为圆括号即可解决问题。但是为什么没有遵循TC ++ PL的规则呢?这是编译器问题还是我误解了什么?提前致谢。