【发布时间】:2019-09-30 13:03:38
【问题描述】:
我不明白为什么 c1 = {1, 2, 3, 4} 和 c2 = {5, 6, 7, 8} 工作正常,没有声明的构造函数,编译器生成的编译器不适合.
我试图通过显式转换来理解:(C&) { 1, 2, 3, 4} 和 (const C&) { 1, 2, 3, 4},但它不起作用。如果编译器提供了带有初始化列表的默认构造函数,还是我从错误的角度考虑问题?
#include <cstdlib>
#include <iostream>
using namespace std;
namespace A001 {
class A { public: int a; double b; };
class B { public: int a; double b; };
class C { public: A a; B b; };
void test() {
C c1 = { 1,2,3,4 }, c2 = { 5,6,7,8 };
cout << c1.b.a + c2.a.b;
}
}
【问题讨论】:
-
请注意,如问题第一段所述,它不是
c1 = {1, 2, 3, 4}和c2 = {5, 6, 7, 8}。这是C c1 = {1, 2, 3, 4}和(隐式)C c2 = {5, 6, 7, 8}。 -
“编译器生成的编译器”你的意思是......构造函数?虽然编译器生成的编译器让我觉得我们已经走到了历史的尽头。
-
是的,我的意思是构造函数,只是有点分心。我熟悉结构大括号初始化,但遇到了这样的类代码,所以有点困惑。
标签: c++ initialization c++17 copy-constructor default-constructor