在 C++11 中,我可以像这样迭代一些容器:
for(auto i : vec){
std::cout << i << std::endl;
}
但我知道这是不必要的——不必要地,因为我只需要print的价值观vec
- 复制 (EDIT:)的每个元素vec
,所以我可以这样做:
for(auto &i : vec){
std::cout << i << std::endl;
}
但我想确保vec
永远不会被修改并遵守常量正确性,所以我可以这样做:
for(const auto &i : vec){
std::cout << i << std::endl;
}
所以我的问题是:如果我只需要look在某些容器的值上,最后一个循环不会(const auto &i
) 始终是首选,因为没有额外的 (EDIT:)的每个元素vec
?
我正在开发一个程序,我正在考虑在整个程序中进行此更改,因为效率对其至关重要(这也是我首先使用 C++ 的原因)。
是的。同样的原因,如果你只读取一个参数,你就创建参数const&
.
T // I'm copying this
T& // I'm modifying this
const T& // I'm reading this
这些是您的“默认值”。什么时候T
是一个基本类型(内置),但是,您通常只需恢复到const T
(无参考)供阅读,因为副本比别名便宜。
我正在开发一个程序,我正在考虑在整个程序中进行此更改,因为效率在其中至关重要
- 不要盲目进行彻底改变。一个可以工作的程序比一个快速但损坏的程序要好。
- 如何迭代循环可能不会产生太大影响;你循环播放是有原因的,不是吗?你的循环体更有可能是罪魁祸首。
- 如果效率至关重要,您需要使用profiler找出你的程序的哪些部分actually慢,而不是猜测那些部分might慢一点。请参阅#2 了解为什么您的猜测可能是错误的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)