【发布时间】:2017-11-04 19:52:16
【问题描述】:
当我尝试编译包含此片段的代码时:
vector<vector<bool>> p(n);
for(vector<bool>& i : p) {
i = vector<bool>(m);
}
for(vector<bool>& i : p) {
for(bool& j : i) {
int a = round(rand() / double(RAND_MAX));
if(a) j = true;
else j = false;
}
}
发生错误,指出 j 是一个右值,因此我无法将左值引用绑定到它。为什么是右值?如果我没看错的话,它不是一个表达式,而是存在于向量 i 的内存元素中。更重要的是,当我只使用一个循环时它工作得很好。
我知道我可以轻松地将其替换为普通的 for 循环,但我想了解为什么这是错误的,并了解当我想更改值时是否可以使用嵌套的 c++11 for 循环。
【问题讨论】:
-
第一个循环的目的是什么?为什么不干脆做
vector<vector<bool>> p(n, vector<bool>(m));?我建议thisstd::vectorreference,尤其是the constructor reference(参见重载2)。 -
至于你的问题,用
auto代替类型推断。
标签: c++11 for-loop nested-loops rvalue