【发布时间】:2020-05-03 14:02:11
【问题描述】:
std::vector<bool> 使用代理迭代器。
因此以下代码将无法编译(代码取自 related question 中接受的答案):
vector<bool> v = {true, false, false, true};
for (auto& x : v)
x = !x;
在相关问题中,接受的答案指出要修改向量的组件,我们必须使用
for (auto&& x : v)
x = !x;
但如果我只是这样做:
for (auto x : v)
x = !x;
这会产生相同的结果。那么&& 不需要吗?
进一步为什么以下2个代码没有修改组件?
for (bool &&x : v)
x = !x;
和
for (bool x : v)
x = !x;
【问题讨论】:
-
用第二个和第三个 sn-ps 检查
x的 type,与最后两个相比,可能会很有启发性。 -
在
for循环中放置一个断点,你会看到使用auto不会导致x具有bool类型。 -
各位,请阅读问题的第一行。
-
我想我误解了代理迭代器的工作原理。这回答了我的最后一个问题。我仍然对为什么
auto &&和auto会产生相同的行为感到困惑?在我看到的所有相关问题中,答案使用auto &&。 -
auto&& 的全部意义在于它对vector
和vector 都有效。你也不能使用 auto 并明确说明类型。
标签: c++ for-loop vector boolean