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

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

本文关键字:lt 非法 代码 在下面 cout 上下文 为什么      更新时间:2023-10-16

我是C++新手,正在尝试学习关键字"auto"和引用的概念。我在网上看到了这个问题和答案。

以下范围是否合法?如果是这样,c的类型是什么?

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

答案是:

取决于 for 循环体中的代码。例如:

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

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

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

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