ユニバーサルキャラクタ名を含む文字列リテラルに接頭辞u8
を省略するとどうなりますか?ユニバーサルキャラクタ名を含む文字列リテラルのu8接頭辞を省略します。
ので、代わりの:
u8"\u00a7some-text"
私はこの書き込み:u8
接頭辞なしで
"\u00a7some-text"
ユニバーサルキャラクタ名を含む文字列リテラルに接頭辞u8
を省略するとどうなりますか?ユニバーサルキャラクタ名を含む文字列リテラルのu8接頭辞を省略します。
ので、代わりの:
u8"\u00a7some-text"
私はこの書き込み:u8
接頭辞なしで
"\u00a7some-text"
を、文字列は、文字は、お使いのプラットフォームのを設定実行にエンコードされます。実行文字セットはUTF-8(いくつかのプラットフォームではデフォルト)でもかまいませんが、常にUTF-8とみなすことはできません(this answer参照)。
実行文字セットが汎用文字名(または文字列リテラルの他の値)をエンコードできない場合、結果は実装定義です(つまり、エラーまたは一部のセンチネル値が発生する可能性があります)。 -fexec-charset=ascii
とGCC 5.3を使用してコンパイルする場合
const char* c = "\u00a7";
、それはエラーで失敗します:U + 00A7は、ASCIIでエンコードすることができないので、
error: converting UCN to execution character set: Invalid or incomplete multibyte or wide character
これは例えば、コードを考えてみましょう。しかし、u8
接頭辞を使用して:
const char* c = u8"\u00A7";
コンパイルが成功し、バイト0xC2
0xA7
0x00
からc
ポイント。
u8
接頭辞を使用すると、プラットフォームの構成に関係なく、文字列がにUTF-8でエンコードされていることが保証されます。