【发布时间】:2023-03-05 10:02:02
【问题描述】:
"我们可以初始化一个我们没有定义的类的对象 任何构造函数使用:
- 成员初始化。
- 复制初始化。
- 默认初始化。
例如:
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
C++ 编程语言第 4 版。第17.3.1章
例如:
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 时一样多。两个编译器中的错误都是“无法将数据转换为 int”。但是,实现复制构造函数这个错误消失或没有实现它但使用圆括号语法。这个问题有点愚蠢,改变圆括号的卷曲问题就解决了。但是为什么不遵循 TC++PL 的规则?,是编译器问题还是我误解了什么?。提前致谢。
【问题讨论】:
-
这已由 DR 修复到 C++14,see here
标签: c++ c++11 copy-constructor uniform-initialization