c++ 11标准(ISO/IEC 14882:2011)在§ C.1.1
中说:
char* p = "abc"; // valid in C, invalid in C++
对于c++,它是OK的,因为指向字符串文字的指针是有害的,因为任何修改它的尝试都会导致崩溃。但为什么它在C中成立?
c++ 11还说:
char* p = (char*)"abc"; // OK: cast added
这意味着如果在第一个语句中添加了强制转换,它就会生效。
为什么强制转换使第二个语句在c++中有效,它与第一个语句有什么不同?它不是仍然有害吗?如果是这样,为什么标准说这是可以的?