のは、C++ 11標準(the N3376 draft、正確には)から、以下の引用文を考えてみましょう:Lは、ユーザーデFi回線ned-ある場合ユーザー定義の文字列リテラル対。他のユーザー定義リテラル
(2.14.8.5)
文字列リテラルの場合、strを のud-su ffi xのない文字列とし、lenをstrのコード単位数(つまり、終端ヌル文字を除く長さの )とします。リテラルLは、ユーザ定義リテラル(浮動小数点、整数、文字)の他のすべてのタイプの長さに沿って
operator "" X (str , len)
を通過することはないのに対し、フォームの呼び出しとして に処理されてもリテラル自体は文字列として渡されます。例:
42_zzz; // calls operator "" _zzz("42") and not operator "" _zzz("42", 2)
なぜ文字列と文字列以外のユーザー定義リテラルが区別されますか?または、なぜ実装はUD文字列リテラルのlenを渡すのでしょうか?長さは、他のリテラルの場合と同様に、ヌル終了によって推測することができます。私は何が欠けていますか?
おそらくエンコード/文字セットと関係があります。その前の他の段落はすべて "[注:シーケンスc1c2 ... ckは基本的なソースキャラクタセットの文字のみを含むことができます。 – Mat
@Mat:しかし、他のエンコーディングや文字セットの文字列はまだNULLで終了していますが、そうではありませんか? –
ヌルターミネーションでは不十分です。私は、 "基本的なソース文字セット"には '\ 0'が含まれていないと思います。 – Mat