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

时间:2016-02-02 05:09:54

标签: c++ reference auto

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

  

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

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

答案是:

  

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

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

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

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