0

将括号更改为花括号似乎会在我的程序中产生完全相同的行为,即使在语义上它们似乎是完全不同的野兽。是否有理由(内存使用、性能等)更喜欢一个?

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
4

1 回答 1

1

首先请注意,您所做的不是初始化,而是类型转换,然后是赋值。我强烈推荐 C++ 转换运算符(static_cast在这种情况下)而不是 C 转换和这些基于构造函数的转换。

也就是说,统一初始化和另一个之间的主要区别是统一初始化不允许(请参阅注释)缩小您正在执行的转换,从浮点到 int。这在写入常量或初始化变量时很有帮助,因为用intwith初始化3.141592654完全没有意义,因为小数部分将被删除。

注意:我记得统一初始化的最初提议明确指出它不允许缩小转换,所以如果我理解正确,像你这样的代码不应该编译。
我已经对其进行了测试,似乎编译器会发出有关缩小转换的警告,而不是中止编译。事实上,警告也很有用,你总是可以使用-Werror标志。

于 2014-08-06T17:06:03.580 回答