use*_*240 7 c++ gcc clang c++11 c++14
我最近发现了clang和gcc的奇怪行为.我有一个struct(MyClass
),它为其中一个成员(active
)使用类内初始化:
struct MyClass {
int something;
bool active = true;
};
Run Code Online (Sandbox Code Playgroud)
现在我尝试对这个类进行大括号初始化.
使用clang,我可以决定是否包含active
在初始化列表(MyClass a = { 42, true};
)中或不包含(MyClass a = { 42 };
).
但是使用gcc,我的代码只有在我不包含的情况下编译active
.否则,我将得到以下编译器错误:
error: could not convert ‘{42, true}’ from ‘<brace-enclosed initializer list>’ to ‘MyClass’
Run Code Online (Sandbox Code Playgroud)
这是一个错误吗?标准对此有何评价?VSC++怎么样?您推荐哪种方式作为便携式解决方案?
在Debian Linux上使用gcc 4.9和clang 3.5进行测试.