MyClass a1 {a}; // clearer and less error-prone than the other three MyClass a2 = {a}; MyClass a3 = a; MyClass a4(a);
为什么?
基本上是从 Bjarne Stroustrup 的“The C++ Programming Language 4th Edition” 复制和粘贴:
列表初始化 不允许缩小 (搂iso.8.5.4)。那是:
例子:
void fun(double val, int val2) { int x2 = val; // if val == 7.9, x2 becomes 7 (bad) char c2 = val2; // if val2 == 1025, c2 becomes 1 (bad) int x3 {val}; // error: possible truncation (good) char c3 {val2}; // error: possible narrowing (good) char c4 {24}; // OK: 24 can be represented exactly as a char (good) char c5 {264}; // error (assuming 8-bit chars): 264 cannot be // represented as a char (good) int x4 {2.0}; // error: no double to int value conversion (good) }
= 优于 {}的 唯一auto情况是使用关键字来获取由初始化程序确定的类型。
auto
auto z1 {99}; // z1 is an int auto z2 = {99}; // z2 is std::initializer_list<int> auto z3 = 99; // z3 is an int
除非您有充分的理由不这样做,否则首选 {} 初始化而不是替代方法。