文字列リテラルのデータ型について混乱しています。それはconst char *
またはconst char
ですか?洞察は高く評価されます。おかげC++文字列リテラルのデータ型は何ですか?
18
A
答えて
25
は、それはあなたがの」長さを定義した場合N
は、文字列の長さプラス終了NUL
(または文字列の長さだけのためのものですconst char[N]
(char const[N]
として同じものである)であり、文字列 "にはすでにNUL
が含まれています)。
これは、sizeof("hello") - 1
を実行して文字列の文字数を取得できる理由です(埋め込み文字を含む)NUL
を含む)。それがポインタだった場合は、システム上のポインタのサイズ(常に1を引いた値)になるため、動作しません。
7
"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""
)のエンコードは、実装定義されています。
私の回答を参照してくださいhttp://stackoverflow.com/questions/12451496/what-is-the-data-type-for-a-string/12452097#12452097同様の質問。 – PiotrNycz
これが間違っている人の数で判断すると(const char *と考える)、なぜこれが落選しているのか分からない。回答者の半分が答えを知らないときには、明らかに良い気持ちです。 – WhozCraig
@CraigNelson、私は10代の担当者があまりにも多くの人々が最後の間にそれを間違って取得する方法を見てきました。 – chris