9

繰り返しますが、別の質問に回答しているときに、整数または浮動リテラルが見つかった場合にのみ、宣言のセットからリテラル演算子テンプレートが選択されることを忘れていました (私のせいです)。

例として:

template <char... C>
constexpr int operator "" _x() {
    return 0;
}

として使用できますが、としても "foo"_x10_xとしても使用できません。foo_x

標準がそれを言っているという明白な理由は別として、文字列リテラルを扱うときにそれらが考慮されない技術的な理由(もしあれば)は何ですか?

私はそのための提案も見つけました(まあ、まったく同じではありませんが、アイデアが得られます)が、それでもそれはオプションではありません.
それらを文字列に使用できない理由は何ですか?

4

1 に答える 1

8

文字セットやエンコーディングなどの混乱が複雑になる場所があります。文字セットのエンコーディングが実行時とコンパイル時で異なる場合、同じ文字をエンコードする方法が複数ある場合はどうなりますか? utf-8 でエンコードされた文字列と異なるエンコーディングは何かをしますか? ランタイム文字セットに変換しますか?

簡単な答えがあるかもしれません。しかし、提案者が「わかりました、これをカットします」と行き、リテラルが標準に入ったほどの複雑さがありました。

浮動小数点および整数リテラルに使用できる文字は制限されており、この問題はありませんでした。

しかし、あなたはN2750にリンクしているドキュメントにリンクしており、次のように直接述べています。

「生の」形式の文字列リテラルが必要になる場合があります。

"Hello, " L"Worl\u0044!"

と区別できる

L"Hello, World!"

しかし、これは翻訳の段階でうまく作用せず、この機能の説得力のある使用例は知られていませんでした。

于 2016-09-30T19:02:48.570 に答える