将parens更改为花括号似乎在我的程序中产生完全相同的行为,即使在语义上它们似乎是完全不同的野兽。是否有理由(内存使用,性能等)更喜欢一个?
double pie = 3.14159;
myVal = int(pie); // type conversion using operator()
myVal = int{pie}; // uniform initialization syntax
[编辑]
我的实际代码与上面的示例略有不同,也许这解释了缩小的问题:
int32_t result;
myVal = uint16_t(result); // myVal is between 0 and 65535
myVal = uint16_t{result}; // myVal is between 0 and 65535
答案 0 :(得分:1)
首先请注意,您在那里做的不是初始化,是一个类型转换后跟一个赋值。我强烈建议使用C ++强制转换操作符(在本例中为static_cast
)而不是C强制转换和基于构造函数的强制转换。
那就是说,统一初始化和另一个之间的主要区别在于统一初始化不允许(参见注释)缩小转换,这样你正在做的,浮动到int。这在写常量或初始化变量时很有用,因为用int
初始化3.141592654
根本没有任何意义,因为小数部分将被剥离。
注意:我记得有关统一初始化的初步建议明确声明禁止缩小转化次数,所以如果我理解正确,那么像你这样的代码就不应该编译。
I have tested it似乎编译器会对缩小转换而不是中止编译发出警告。实际上,这些警告也很有用,你总是可以使用-Werror
标志。