在 for-each 循环中使用 'auto' 时是否需要添加'const'?
Do I need to add 'const' when using 'auto' in for-each loop?
为了避免复制对象,通常最好使用
for(auto &x : container){...}
for(auto x : container){...}
但是在常规c++中,引用是非const的,这允许对容器进行修改。因此,我们是否应该理所当然地做以下事情,就像我们在不修改数据时使方法const
一样?
for(const auto &x : container){...}
这取决于您想在for
语句体中做什么。
- 如果你想对你迭代的元素进行只读访问,那么使用
auto const&
。 - 如果你想修改元素,那么使用
auto&&
。我更喜欢auto&
,因为它处理解引用容器的迭代器产生右值的情况(vector<bool>
)。
还有一个建议允许
for(x : container) { ... }
是
的一种简洁形式for(auto&& x : container) { ... }
相关文章:
- 添加静态constexpr成员是否会更改结构/类的内存映射
- 是否将std::packaged_task添加到现有线程
- 将常量字符串添加到非常量字符串是否会给出常量字符串
- 这种方式是否可以接受向向量添加unique_ptr?
- 是否通过向封闭对象的地址添加字节偏移量来访问子对象
- 在 Eclipse 中添加库的工作方式是否与在 Visual Studio 中相同?
- MFC 中的窗口消息管理:添加基类调用是否是强制性的?
- 检查数组中是否有字符串中的值,如果没有,则添加它
- 以这种方式初始化的 char 数组是否会自动添加空终止符?
- 是否可以在 for 循环中添加两个浮点数?
- 在迭代期间添加到 std::unordered_set(或 unordered_map)中的元素是否会在迭代期间访问?
- 是否允许向空指针添加零?
- 检测是否在 QTableWidget 中添加或删除了列
- 是否可以使用OpenMP并行化一个列表,该列表可以在每次迭代中添加新元素
- 添加noexcept是否会破坏二进制兼容性
- 弄清楚使用emplace_hint时是否添加了项目
- cin函数是否添加了在输入结束时终止的null
- 如何在unordered_map中设置值并查明是否添加了新键
- AES_cbc_encrypt是否添加填充
- C++11是否添加了C99限制说明符?如果没有,为什么不呢