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 ++中有效,它与第一条语句有何不同?还是有害吗?如果是这样,为什么标准说没问题?
如果更改此规则,那么太多的遗留C代码将被破坏。
—
Paul R
请引用标准说第二的地方的文字
—
Nawaz 2014年
OK
。
C语言比以前有字符串文字
—
Casey 2014年
const
,因此不一定const
。
C和C ++允许您将几乎所有类型都转换为另一种类型。这并不意味着这些演员表是有意义且安全的。
—
思源任
char[]
首先要做字符串文字的类型。第二个是const_cast
变相。