xml*_*lmx 14 c++ performance standards initialization c++11
在C++ 11中,以下两个语句都是合法的:
声明1. int a[8] = {};
声明2. int a[8]{};
但是,我更喜欢声明1而不是声明2因为我认为声明1更具表现力.
C++ 11标准是否保证两个语句在语义上是等效的?
Luc*_*ore 19
从语义上讲,它们不一样,就像复制/直接初始化一样:
1列表初始化是从braced-init-list初始化对象或引用.这样的初始化程序称为初始化程序列表,列表的逗号分隔的初始化程序子句称为初始化程序列表的元素.初始化列表可以为空.列表初始化可以在直接初始化或copyinitialization上下文中进行; 直接初始化上下文中的列表初始化称为直接列表初始化,复制初始化上下文中的列表初始化称为复制列表初始化.[...](强调我的)
原始答案,处理比较性能:不,该标准规定了对算法的一些复杂性限制,但在这些问题上没有表现.这最好留给编译器,但所有编译器都可能生成相同的代码.
考虑复制初始化与直接初始化.标准只规定它们是什么,它从不说一个必须比另一个快,或者它们必须表现相同.这完全取决于编译器.
这是一件好事,因为编译器知道什么是最适合该平台的.如果标准确实施加了这样的限制,那么它可以说+
比必须更快*
,这非常直观.但想想一个为乘法而构建的平台,它实际上*
在机器代码中的计算速度更快.编译器必须不遗余力地转换*
为较慢的指令,只是为了符合标准.
归档时间: |
|
查看次数: |
453 次 |
最近记录: |