在C++ 11中,以下两个语句均合法:
声明1. int a[8] = {};
声明2. int a[8]{};
但是,我更喜欢陈述1而不是陈述2,因为我认为陈述1更具表现力。
C++ 11标准是否保证两个语句在语义上都是等效的?
最佳答案
从语义上讲,它们是不同的,非常类似于复制/直接初始化:
8.5.4列表初始化[dcl.init.list]
原始答案,处理比较性能:
不,该标准规定了对算法的一些复杂性限制,但没有规定此类问题的性能。这最好交给编译器,但是所有编译器都可能会生成相同的代码。
考虑一下复制初始化与直接初始化。该标准仅指定它们是什么,它从未说过一个必须比另一个更快,或者它们必须表现相同。这完全取决于编译器。
这是一件好事,因为编译器知道哪种软件最适合该平台。 如果该标准确实现加了此类限制,则可以说+
必须比*
更快,这是非常直观的。但是考虑一下为乘法而构建的平台,在该平台上,以机器代码计算*
的速度实际上更快。编译器必须竭尽全力将*
转换为较慢的指令,以符合标准。