文字列リテラルのデータ型について混乱しています。それconst char *
はconst char
?
3584 次
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"s
はstd::string
.
また、それぞれ UTF-8、UTF-16、および UTF-32 エンコーディングを指定する、C++11 によって追加されたu8""
、u""
および文字列リテラル表記にも注意してください。U""
修飾されていない文字列リテラル (すなわち""
およびL""
) のエンコーディングは (常に) 実装定義です。
于 2014-09-30T08:11:16.423 に答える