2017-01-29 3 views
10

これは古い機能ですが、user defined literalsで読むことがわかりました。アンダースコア以外の名前は、UDLの実装に予約されていますが、逆の意味はありません。

return_t operator "" _a(long); // Literal operator for user-defined INTEGRAL literal 

私は

先頭にアンダースコアが必要であることを思い出しました。 (のみ標準ライブラリがアンダースコアなしリテラルを定義することが許可されている。)(A)

これまでの実装はunderscorey名で働いており、例えば、私たちに良いものを残したので、これはパターンを破るように見えます

  • が大文字に続いて下線で始まる

    1. は二重のアンダースコアを含む名前は、実装にある予約

    さらに、引用符(A)は規則(2)の存在下でやや危険です。 なぜ矛盾

  • +3

    これは、標準ライブラリの「自然な」サフィックスを得ることができるため、ユーザー定義のサフィックスをそのまま表示することができます。 –

    答えて

    9

    ユーザー定義リテラルの概念が言語に追加される前に、すべての標準リテラルは、long intリテラルの場合は123Lのように、アンダースコアで始まらないシーケンスを使用しました。したがって、一貫性を維持するために、標準リテラルは特別な接頭辞なしで名前空間を取得し、UDLは_を使用して区別されます。

    関連する問題