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
つまり、最初のステートメントにキャストが追加された場合、それは有効になります。
キャストによって2番目のステートメントがC ++で有効になるのはなぜですか?それは最初のステートメントとどう違うのですか?まだ有害ではないですか?もしそうなら、なぜ規格はそれが大丈夫だと言ったのですか?
OK
。
const
があったため、必ずしもそうではありませんでしたconst
。
char[]
。2つ目はconst_cast
変装です。