C++ auto循环
struct Test {
int id_;
std::list<int> list_;
};
int main() {
std::list<Test> _list{{1, {1, 2, 3}}, {2, {4, 5, 6}}};
for (auto &iter : _list) {
//==--------1.拷贝内容,修改无效--------==
for (auto it : iter.list_) {
it = 9;
}
//结果:_list{{1, {1, 2, 3}}, {2, {4, 5, 6}}}
//==----------------------------------==
//==--------2.引用内容,修改有效--------==
for (auto &it : iter.list_) {
it = 9;
}
//结果:_list{{1, {9, 9, 9}}, {2, {9, 9, 9}}}
//==----------------------------------==
//==--------3.const引用,不可修改--------==
for (const auto &it : iter.list_) {
it = 9; //报错
}
//==----------------------------------==
}
}
上面例子中,如果最外层的auto不可以修改,那么就算内部的auto修改了也没用。
for (auto &c : s){
c = toupper(c);
}
//等价于
for (auto it = s.begin(); it != s.end(); ++it)
{
auto &c = *it; // *it取迭代其的值,auto &c表示引用
c = toupper(c);
}
...