gpt4 book ai didi

c++ - `for (auto&& e : a)` 比 `for (auto& e : a)` 更有效吗?

转载 作者:太空宇宙 更新时间:2023-11-03 10:27:12 24 4
gpt4 key购买 nike

就读取 POD/短 C 结构集合的 L2 缓存未命中而言,for (auto&& e : a)for (auto& e : a) 更有效,并且在代码生成方面如何?

最佳答案

根据标准:

a range-based for statement is equivalent to:

{
auto && __range = range-init;
for ( auto __begin = begin-expr,
__end = end-expr;
__begin != __end;
++__begin ) {
for-range-declaration = *__begin;
statement
}
}

所以for (auto&& e : a)之间的区别和 for (auto& e : a)减少到差异:

auto&& e1 = *__begin;
auto& e2 = *__begin;

如果*__begin可以绑定(bind)到一个左值引用,那么两者是等价的。 e1e2将在任何符合标准的编译器上推导出相同的左值引用类型,并且生成的代码应该相同。

但是,如果这样的绑定(bind)是不可能的(例如 avector<bool> 类型,即 Best. Container. Ever.),那么 e2类型推导将失败,并且只有 e1版本将有效。

所以这不是哪个更有效率的问题。 auto& e仅在 auto&& e 的部分情况下有效在以下情况下有效(后者在任何 range-for 表达式有效的所有情况下均有效)。如果auto& e有效,则完全等同于 auto&& e .

关于c++ - `for (auto&& e : a)` 比 `for (auto& e : a)` 更有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29569953/

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