我有以下代码:
class A
{
public:
A(const unsigned int val) : value(val) {}
unsigned int value;
};
int main()
{
int val = 42;
A a(val);
A b{val}; // <--- Warning in GCC, error in Microsoft Visual Studio 2015
return 0;
}
为什么仅在使用列表初始化的情况下才会出现缩小转换警告?
自C ++ 11起引入列表初始化功能,该功能禁止在内置类型之间进行隐式缩小转换。同时,另外两个使用括号和等号的“旧式”(C ++ 98起)初始化形式
int val = 42;
A a(val);
A a = val;
不要更改其行为以使其符合列表初始化,因为这可能会破坏大量的旧代码库。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句