2013-01-21 25 views
6

std::stringstd::wstringの違いについて私の現在の理解は、単純にバッファのタイプです。すなわち、それぞれcharwchar_tとの間である。std :: string、wstring、u16/32string解説

また、ほとんどすべてのLinuxディストリビューションでwchar_tを使用するプライマリOSのASCIIとUTFの両方の文字列にはcharを使用しています。

しかし、頭の中にまっすぐに入る文字列タイプがいくつかあります:u16stringu32stringは、それぞれ2バイトと4バイトのバッファを持つ文字列です。

だから、私の質問はこれです:sizeof(wchar_t) == 2とプラットフォームで

std::wstring機能std::u16stringに相当するだけでなく、sizeof(wchar_t) == 4std::u32stringとプラットフォームのですか?

+0

文字列/ wstringに関する別の同様の質問があります[ここで

+1

@FloreaMarianそうではありません - その質問は 'string 'と' wstring'です。 'wchar_t'のサイズによって、' wstring'が 'u16string'や' u32string'と同じかどうかを確認しています。 – Qix

+1

http://utf8everywhere.org参照 –

答えて

14

差がchar16_tchar32_tのエンコーディングを明示的にC++ 11標準で定義されている間charwchar_tの詳細は、実装定義されていることです。

これはwstringそうu16stringまたはu32stringのいずれかと同一のデータを保存するためにあることを意味するが、我々はどちらかわかりません。古いchar型のサイズとエンコーディングは標準では定義されていないので、いくつかの奇妙な実装でそれらをすべて異なるものにすることは許されています。

+1

'wstring'は決して他の文字列型と同じではありません。標準では、* 'wchar_t'は' char16_t'と 'char32_t'とは別の型である必要があります。実際には同じ基底型と同じエンコーディングを持つかもしれませんが、 'is_same 'は有効なC++実装では決して 'true'になりません。 –

+1

"同じ"とは、ここでいう「機能的に同等」を意味します。 'sizeof(wchar_t)== 4 'なら、あなたは' wstring'か 'u32string'のいずれかを使って同じ結果を得る可能性が非常に高いでしょう。 –

関連する問題