6

という事は承知しています

char *s = "Hello World!" ; 

は読み取り専用メモリに格納され、ポインタを介して文字列リテラルを変更することはできません。

これはどう違うのですか

const char *s = "Hello World!"; 

また、「string」のタイプは char * または const char * ですか?

4

2 に答える 2

8

違いは、後者は合法で前者は合法でないことです。これは C++11 で行われた変更です。正式に"Hello World!"は、 type const char[13];を持ちます。に変換できますconst char*。昔は、その型は でchar[13]、 に変換できましたchar*。C++ は を追加して配列の型を変更しましたが、使用されている既存の C コードが C++ で機能するようconstに への変換を維持しましたが、ポインターが指すテキストを変更すると、未定義の動作が発生しました。C++11 は への変換を削除したため、現在は合法的にのみ行うことができますchar*char*char*

const char *s = "Hello world!";
于 2013-03-29T13:41:32.903 に答える
6

型を asconst char *にすることで、メモリを誤って上書きすることが難しくなります。

const char *s = "Hello World!";
s[0] = 'X';  // compile error

を使用しないconstと、実行時まで問題が検出されないか、プログラムが微妙に間違っている可能性があります。

于 2013-03-29T13:41:21.347 に答える