在下面的代码上下文中,为什么"cout << c"是合法的,而"c = "x"是非法的?
Within the context of the code below, why is "cout << c" legal while "c = "x"" illegal?
我是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&
.
相关文章:
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 编写代码时C++出现错误:错误 1 错误 C2601:'circle':本地函数定义是非法的
- C++中的移动分配出现问题.非法指令: 4.
- while 循环 c++ 中的非法指令
- 使用 ISdigit 通知任何检测到的非法字符
- 非法,左操作数具有类型 'DWORD [29]'
- 来自 VS C++ 在 Windows 上的非法指令
- WinLamb 错误:成员初始化非法
- "class":非法使用此类型作为表达式 如何解决?
- AVX512 非法指令
- 在Visual Studio中查找非法内存访问
- 如何显式调用运算符<<
- 为什么基于范围类型的大括号上循环init列表是非法的c++
- CUDA非法访问内核内存
- 来自简单循环的 OpenAcc 错误:内核执行期间的非法地址
- 使用指针向量到参考向量是非法的吗?