文字列リテラルの前にそれぞれ//を付けることにより、C++11でUTF-8 / 16 u8
/ 32文字列リテラルを記述できます。コンパイラは、これらの新しいタイプの文字列リテラル内に非ASCII文字を含むUTF-8ファイルをどのように解釈する必要がありますか?標準ではファイルエンコーディングが指定されていないことを理解しています。その事実だけでは、ソースコード内の非ASCII文字の解釈が完全に未定義の動作になり、機能の有用性が少し低下します。u
U
で単一のUnicode文字をエスケープできることは理解していますが\uNNNN
、たとえば、通常は複数のUnicode文字を含む完全なロシア語またはフランス語の文ではあまり読みやすくありません。
さまざまな情報源から私が理解していることは、現在のWindows実装やLinux実装などu
と同等になるはずだということです。それを念頭に置いて、古い文字列リテラル修飾子に必要な動作は何であるかについても疑問に思っています...L
U
コードサンプルサルの場合:
string utf8string a = u8"L'hôtel de ville doit être là-bas. Ça c'est un fait!";
string utf16string b = u"L'hôtel de ville doit être là-bas. Ça c'est un fait!";
string utf32string c = U"L'hôtel de ville doit être là-bas. Ça c'est un fait!";
理想的な世界では、これらの文字列はすべて同じコンテンツを生成します(変換後の文字のように)が、C ++での私の経験から、これは最も確実に実装定義されており、おそらく最初のものだけが私が望むことを実行することがわかりました。