gpt4 book ai didi

c++ - C++11 是否保证 "int a[8] = {};"在语义上等同于 "int a[8]{};"?

转载 作者:IT老高 更新时间:2023-10-28 22:35:03 26 4
gpt4 key购买 nike

在 C++11 中,以下两个语句都是合法的:

语句 1. int a[8] = {};

语句 2. int a[8]{};

但是,我更喜欢语句 1 而不是语句 2,因为我认为语句 1 更具表现力。

C++11 标准是否保证两个语句在语义上是等效的?

最佳答案

在语义上,它们并不相同,很像复制/直接初始化:

8.5.4 列表初始化[dcl.init.list]

1 List-initialization is initialization of an object or reference from a braced-init-list. Such an initializer iscalled an initializer list, and the comma-separated initializer-clauses of the list are called the elements of theinitializer list. An initializer list may be empty. List-initialization can occur in direct-initialization or copyinitializationcontexts; list-initialization in a direct-initialization context is called direct-list-initialization andlist-initialization in a copy-initialization context is called copy-list-initialization. [...] (emphasis mine)

原始答案,处理比较性能:不,该标准规定了对算法的一些复杂性限制,但没有在这些问题上规定性能。这最好留给编译器,但所有编译器都可能生成相同的代码。

考虑一下复制初始化与直接初始化。该标准仅指定它们是什么,它从未说一个必须比另一个更快,或者它们必须表现相同。这完全取决于编译器。

这是一件好事,因为编译器知道什么最适合该平台。如果标准确实现加了这样的限制,它可以说 + 必须比*,非常直观。但是想想一个为乘法而构建的平台,在机器代码中计算 * 实际上更快。为了符合标准,编译器必须不遗余力地将 * 转换为较慢的指令。

关于c++ - C++11 是否保证 "int a[8] = {};"在语义上等同于 "int a[8]{};"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14871081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com