gpt4 book ai didi

C++11 基于范围的 for 循环效率 "const auto &i"与 "auto i"

转载 作者:IT老高 更新时间:2023-10-28 13:58:56 24 4
gpt4 key购买 nike

在 C++11 中,我可以像这样迭代一些容器:

for(auto i : vec){
std::cout << i << std::endl;
}

但我知道这是不必要的 - 不必要,因为我只需要 打印 vec 的值 - 复制 (< strong>EDIT:vec 的每个元素,所以我可以这样做:

for(auto &i : vec){
std::cout << i << std::endl;
}

但我想确保 vec 的值永远不会被修改并遵守 const-correctness,所以我可以这样做:

for(const auto &i : vec){
std::cout << i << std::endl;
}

所以我的问题是:如果我只需要查看某个容器的值,那么最后一个循环 (const auto &i) 是否总是首选由于没有额外的 (EDIT: each element of) vec?

拷贝提高了效率

我正在开发一个程序,我正在考虑在整个程序中进行此更改,因为效率在其中至关重要(我首先使用 C++ 的原因)。

最佳答案

是的。同样的原因,如果你只读过一个参数,你就将参数设为 const&

T        // I'm copying this
T& // I'm modifying this
const T& // I'm reading this

这些是您的“默认值”。但是,当 T 是基本类型(内置)时,您通常只需恢复到 const T (无引用)进行读取,因为拷贝比别名便宜。


I have a program that I'm developing in which I'm considering making this change throughout, since efficiency is critical in it

  1. 不要盲目进行彻底的改变。一个工作程序比一个快速但损坏的程序要好。
  2. 你如何迭代你的循环可能不会有太大的不同;你循环是有原因的,不是吗?循环的主体很可能是罪魁祸首。
  3. 如果效率至关重要,您希望使用 profiler 来找出程序的哪些部分实际上很慢,而不是猜测可能的部分/em> 慢点。请参阅 #2,了解为什么您的猜测可能是错误的。

关于C++11 基于范围的 for 循环效率 "const auto &i"与 "auto i",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17032267/

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