在下面代码的上下文中,为什么 "cout << c" 合法而 "c = "x"" 非法?

Within the context of the code below, why is "cout << c" legal while "c = "x"" illegal?

我是 C++ 的新手,正在尝试学习关键字 'auto' 和参考的概念。我在网上看到这个问答。

Is the following range for legal? If so, what is the type of c?

const string s = "Keep out!";
for (auto &c : s){ /*... */ }

答案是:

Depending on the code within for loop body. For example:

cout << c;  // legal.
c = 'X';    // illegal.

没有提供任何解释。有人可以解释为什么会这样吗?

因为 s 是一个 const 字符串所以你不能改变它的值。在这种情况下,c 的类型将是 const char&.

因为字符串是常量,所以不能修改。基于范围的循环使用的类型 auto & 将有效地变为 const char &。这意味着您引用的是实际字符串中的字符,而不是它们的副本。