提问人:Александр Кушниренко 提问时间:5/13/2019 最后编辑:DeduplicatorАлександр Кушниренко 更新时间:5/13/2019 访问量:67
为什么这种隐式转换会起作用,为什么会起作用
Why how and why this implicit conversion works
问:
我不明白为什么 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赞
Vittorio Romeo
5/13/2019
#1
这不是隐式转换,而是聚合初始化 + 大括号省略。例如
C c1 = { 1,2,3,4 }
相当于
C c1{ {1,2}, {3,4} }
评论
c1 = {1, 2, 3, 4}
c2 = {5, 6, 7, 8}
C c1 = {1, 2, 3, 4}
C c2 = {5, 6, 7, 8}