【问题标题】:Does always int i{0} be faster then int i = 0?int i{0} 总是比 int i = 0 快吗?
【发布时间】:2022-01-07 12:53:59
【问题描述】:
int i{0}; //(1)
int i = 0; //(2)

我是否正确理解在第一种情况下 (1) 变量 i 已经创建为 0 作为它的值,在 (2) 中它将创建没有值然后分配一个值 0,所以 (1 ) 总是比 (2) 快?

但似乎大多数(全部?)现代编译器仍会将 (2) 优化为与 (1) 相同?

【问题讨论】:

  • 问题中的 1 是错字吗?
  • 不,在这里它们最终的意思是一样的。为i 分配了空间,该空间立即归零。不涉及任务。 See here for documentation
  • 不,代码将是相同的:编译器没有理由生成带有额外分配的较慢代码。 i 没有价值就无法创建
  • Excellent viewing 如果你有一个小时并且真的想深入了解 C++ 初始化。
  • 你的代码中没有赋值

标签: c++ c++11 initialization compiler-optimization


【解决方案1】:

使用 Brace Initialization 初始化变量会在编译时执行额外的检查(对运行时没有影响)。 .例如,如果您在花括号内输入浮点文字,则会引发错误。用等号初始化将由编译器优化。尽可能首选大括号初始化。希望能回答你的问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 2016-07-20
    • 2016-07-14
    • 2019-06-25
    • 1970-01-01
    • 2014-09-03
    相关资源
    最近更新 更多