3
文字列定数から 'char *'への変換がCでは有効であるがC ++では無効である理由
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 ++で有効になるのはなぜですか?それは最初のステートメントとどう違うのですか?まだ有害ではないですか?もしそうなら、なぜ規格はそれが大丈夫だと言ったのですか?