此代码在 MS Visual Studio 中的行为很奇怪:
char *s = "hello";
s[0] = 'a';
printf(s);
在启用优化的发布版本中,它会忽略 s[0] = 'a' 并打印“hello”。如果没有优化或调试版本,它会因访问冲突而崩溃。
这种行为是否符合 C++ 标准?在我看来,编译器应该只允许对字符串文字的常量引用,即
const char *s = "hello";
编辑:我知道它为什么这样工作,我不明白为什么允许我对只读内存进行非常量引用。