13

std::stringとの違いについての私の現在の理解は、std::wstring単にバッファのタイプです。つまり、それぞれcharvswchar_tです。

私はまた、ほとんどの (すべてではないにしても) Linux ディストリビューションがchar、ASCII と UTF の両方のあらゆる文字列に使用することを読みました。Windows はwchar_tもはや使用する主要な OS です。

ただし、頭の中で理解しておきたい文字列型が他にもいくつかあります。u16stringu32stringは、それぞれ 2 バイトと 4 バイトのバッファーを持つ文字列です。

だから、私の質問はこれです:

を備えたプラットフォームではsizeof(wchar_t) == 2、 は とstd::wstring機能的に同等であり、 および を備えたプラットフォームとstd::u16string同様です。sizeof(wchar_t) == 4std::u32string

4

1 に答える 1

20

違いは、 と の詳細charは実装定義であるのに対し、とwchar_tのエンコーディングはC++11 標準によって明示的に定義されていることです。char16_tchar32_t

これは、 が または のいずれかと同じデータを格納する可能性が高いことを意味しますが、どちらwstringわかりません。また、古い char 型のサイズとエンコーディングが標準で定義されていないため、いくつかの奇妙な実装でそれらをすべて異なるものにすることが許可されています。u16stringu32string

于 2013-01-21T12:32:19.863 に答える