在下面代码的上下文中,为什么 "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 &
。这意味着您引用的是实际字符串中的字符,而不是它们的副本。
我是 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 &
。这意味着您引用的是实际字符串中的字符,而不是它们的副本。