C++11 标准(ISO/IEC 14882:2011)在§ C.1.1
中写道:
char* p = "abc"; // valid in C, invalid in C++
对于C++来说,指向字符串字面量的指针是有害的,因为任何修改它的尝试都会导致崩溃。但是为什么在C中是有效的?
C++11也提到:
char* p = (char*)"abc"; // OK: cast added
这意味着如果在第一条语句中添加了一个转换,它就会变得有效。
为什么在C++中进行类型转换可以使第二个语句有效?这与第一个语句有什么不同吗?难道它不仍然是有害的吗?如果是这样,为什么标准说这是可以的?
char[]
。第二个是伪装成const_cast
。 - chrisconst
关键字先存在,因此它们并不是const
。 - Casey