我在C++ Primer中读到:
如果我们想更改字符串中字符的值,我们必须将循环变量定义为引用类型(第 2.3.1 节,第 50 页)。请记住,引用只是给定对象的另一个名称。当我们使用引用作为控制变量时,该变量依次绑定到序列中的每个元素。使用引用,我们可以更改引用绑定到的字符。
他们进一步给出了这个代码:
string s("Hello World!!!");
// convert s to uppercase
for (auto &c : s) // for every char in s (note: c is a reference)
c = toupper(c); // c is a reference, so the assignment changes the char
in s
cout << s << endl;
这段代码的输出是 HELLO WORLD!!!
我还读到:
无法重新绑定引用以引用不同的对象。因为无法重新绑定引用,所以必须初始化引用。
问题:每次引用变量c
绑定到字符串 s 的下一个字符时,这段代码不会导致重新绑定吗?
for (auto &c : s)
c = toupper(c);