Augists

for auto

5 Aug 2020

1 min read

C++ 的这个特性我是在看 STL 的时候了解到的,整个小学期也一直在用,但是当时有地方没弄明白 现在重新去单独看了这个


普通形式

string s = "augists";
for (auto i : s)
	i = toupper(i);

在语句 for (auto i : s) 中,i 会作为 s 的迭代器的每个取值的副本进行遍历 也就是说,这个循环相当于

for (auto p = s.begin(); p != s.end(); ++p)
{
	auto i = *p;
	i = toupper(i);
}

这也能看出来,i 每次是作为一个新的变量只拿到了值,而非指针或引用,不能修改原值


引用形式

想要能修改原值,改成引用就好了呀

string s = "augists";
for (auto &i : s)
	i = toupper(i);