为什么这种隐式转换如何以及为什么起作用

时间:2019-05-13 14:33:57

标签: c++ initialization c++17 copy-constructor default-constructor

我不明白为什么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;
   }
}

1 个答案:

答案 0 :(得分:1)

这不是隐式转换,它是aggregate initialization + brace elision。例如

C c1 = { 1,2,3,4 }

等同于

C c1{ {1,2}, {3,4} }