10

私の質問は矛盾しているように聞こえますが、. 以外の新しいリテラル構文を参照する方法がわかりませんuser-defined-literal

std::string operator "" s ( const char* str, size_t len )
{
   return std::string( str, len );
}

assert( "foo"s == "bar"s );

_ユーザー定義リテラルはプレフィックスで始める必要があると聞いたのを覚えています。これは、ライブラリが接頭辞のないリテラルをいくつか定義していることを意味します。

標準は、標準ライブラリでいくつかの UDL を提供しますか?
はいの場合、それらは何ですか?

4

4 に答える 4

6

標準ライブラリは、実際にはユーザー定義のリテラルを定義していません。おそらく複素数を期待していたでしょうが、そうではありません。

一方で、それらを再び削除する提案もあります

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3250.html

ですから、何が起こるかはまだわかりません。

于 2011-03-21T16:51:34.610 に答える
5

この言語では、たとえば、通常のリテラルのサフィックスが既に使用されています1U

Uユーザー定義リテラルとして使用するとあいまいになるため、お勧めします。

整数サフィックス: u, U, l, L,llLL

浮動接尾辞: f, F, l,L

于 2011-03-21T16:23:07.147 に答える
2

@Matthieuの回答とは対照的に、FIDSは2.14.8 [lex.ext]p1で次のように述べています。

トークンがuser-defined-literalと別のリテラルの種類の両方に一致する場合、後者として扱われます。
[例: 123_kmユーザー定義リテラルですが、12LL整数リテラルです。—終了例]

したがって、これらのリテラルを定義しても、事前定義されたリテラルが使用され、あいまいさはありません。

于 2011-04-16T03:12:16.890 に答える
1

ユーザー定義のリテラルを主張する標準ライブラリ コンポーネントはありません。@Bo は可能性として複合体について言及しました。

もう 1 つはビットセットです。

template<char... Bits>
  inline constexpr std::bitset<sizeof...(Bits)>
  operator"" bits()
  {
    return std::bitset<sizeof...(Bits)>((char []){Bits..., '\0'});
  }

私は、今後のライブラリ TR2 の機能強化で、さまざまなライブラリ コンポーネントのリテラル演算子の提案があると予測しています。

接尾辞の名前空間をめぐる衝突が予想されます。名前空間でリテラル演算子を宣言し、複数のあいまいな定義を防ぐことができますが、実際のリテラルでは名前空間によって実際の接尾辞を区別できません。見てみましょう。

于 2011-10-26T17:51:59.550 に答える