C++ 11では、文字列リテラルプレフィックスの新しいセットが導入されています(さらにユーザー定義のサフィックスも可能です)。さらに、Unicodeのエスケープシーケンスを直接使用して、エンコーディングを心配することなく特定のシンボルをコーディングすることができます。Unicode文字列リテラル
const char16_t* s16 = u"\u00DA";
const char32_t* s32 = U"\u00DA";
しかし、私は同様にwchar_t
文字列リテラルのUnicodeエスケープシーケンスを使用できますか?これが不可能ならば、それは欠陥であるように思えます。
const wchar_t* sw = L"\u00DA";
特定のプラットフォーム上にあるものwchar_t
上、他のすべての効果に依存sw[0]
の整数値は、もちろん、これはありません、ポータブルであるべきでしょうか?
Iは、SW 'の値は[0] '' wchar_t'のみの程度に特定のプラットフォーム上にあるかに依存信じます'wchar_t'のサイズは何ですか。私。 '\ u00DA'は、U + 00DAのUnicodeエンコーディング(UTF-8、UTF-16、UTF-32)になるはずです。 – bames53
実際は上記は間違っています。実装は、普遍的な文字名をリテラル文字と同様に扱うことになっています。したがって、インプリメンテーションが文字列リテラルの文字を実行文字セットに変換する場合は、UCNも同様に実行する必要があります。 UCNがUnicodeリテラル(たとえば、u8 "\ u00DA")内にある場合、UTFエンコーディングが保証されます。 – bames53