我是C ++的新手,正在尝试学习关键字' auto'和参考。我在网上看到了这个问题和答案。
以下范围是否合法?如果是这样,c的类型是什么?
const string s = "Keep out!";
for (auto &c : s){ /*... */ }
答案是:
取决于for循环体内的代码。例如:
cout << c; // legal.
c = 'X'; // illegal.
未提供任何解释。有人可以解释为什么会这样吗?
答案 0 :(得分:5)
因为字符串是常量,所以您不能修改它。基于范围的循环使用的类型auto &
将有效地成为const char &
。这意味着您在实际字符串中引用字符,而不是它们的副本。
答案 1 :(得分:3)
因为s
是一个const字符串,所以你不能改变它的值。在这种情况下,c
的类型将为const char&
。