26

文字列リテラルのデータ型について混乱しています。それconst char *const char

4

2 に答える 2

30

これはconst char[N]( と同じですchar const[N]) です。ここNで、 は文字列の長さに終端の 1 を加えたものですNUL(または、「文字列の長さ」を既に を含むものとして定義している場合は文字列の長さだけですNUL)。

これが、文字列 (埋め込まれたssizeof("hello") - 1を含む) 内の文字数を取得できる理由です。NULポインターの場合、システム上のポインターのサイズ (マイナス 1) になるため、機能しません。

于 2012-09-20T17:47:29.680 に答える
8

"Hello world"const char[12](11 文字と'\0'ターミネータ) です。

L"Hello world"ですconst wchar_t[12]

また、C++14 以降"Hello world"sstd::string.

また、それぞれ UTF-8、UTF-16、および UTF-32 エンコーディングを指定する、C++11 によって追加されたu8""u""および文字列リテラル表記にも注意してください。U""修飾されていない文字列リテラル (すなわち""およびL"") のエンコーディングは (常に) 実装定義です。

于 2014-09-30T08:11:16.423 に答える