問題タブ [user-defined-literals]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
12 に答える
37450 参照

c++ - ユーザー定義リテラルは、C++ にどのような新しい機能を追加しますか?

C++11では、既存のリテラル ( 、、、 )に基づいて新しいリテラル構文を導入できるユーザー定義リテラルが導入されているため、どの型でもリテラル表現を使用できます。inthexstringfloat

例:

一見これは非常にクールに見えますが、実際にどのように適用できるのか疑問に思っていました.接尾辞を付けて日付を作成しようとしたとき、_AD演算子_BCの順序のために問題があることがわかりました. 1974/01/06_AD最初1974/01に (プレーンなints として) を評価し、後で評価します ( 8 進数の理由06_ADで、8 月と 9 月を なしで書かなければならないことは言うまでもありません)。これは、演算子の評価順序が機能するよう0に構文を be にすることで回避できますが、扱いにくいです。1974-1/6_AD

要するに、私の質問はこれです。この機能はそれ自体を正当化すると思いますか? C++ コードを読みやすくするために、他にどのようなリテラルを定義しますか?


2011 年 6 月の最終ドラフトに合わせて構文を更新

0 投票する
3 に答える
797 参照

c++ - C++11 のユーザー定義リテラル (拡張リテラル) ... どのコンパイラがサポートしていますか?

別のスレッドで、C++11 の機能、特にユーザー定義リテラルが利用可能になったら、C++ でのモデル駆動型開発に使用するいくつかの手法を紹介しました。GCC 4.5 および 4.6 の計画を改訂したところ、この特定の機能がサポートされていないことがわかりました。

とにかく、C ++ 11が承認され、主流の無料コンパイラ(LLVM、GCC)で実装されるまで、その機能をテストしてアルゴリズムの設計/実装を開始するコンパイラがあるかどうか知っていますか?

0 投票する
1 に答える
999 参照

c++ - c++0x でのユーザー定義リテラルのオーバーロード規則

ルールのオーバーロードについて少し混乱していますが、

次のリテラル演算子があるとしましょう。

1、2、および 3 の両方が定義されている場合、オーバーロードは明らかです。

1 と 2 が定義されている場合、

2 と 3 が定義されている場合

混乱は、最新の c++0x 標準 n3225 2.14.8/3 に由来します。

L がユーザー定義の整数リテラルの場合、n を ud 接尾辞なしのリテラルとします。S に unsigned long long 型のパラメーターを持つリテラル演算子が含まれている場合、リテラル L は次の形式の呼び出しとして扱われます。

演算子 "" X (n ULL)

それ以外の場合、S には生のリテラル演算子またはリテラル演算子テンプレート (13.5.8) が含まれますが、両方は含まれません。S に生のリテラル演算子が含まれている場合、リテラル L は次の形式の呼び出しとして扱われます。

演算子 "" X ("n")

それ以外の場合 (S にリテラル演算子テンプレートが含まれる)、L は次の形式の呼び出しとして扱われます。

operator "" X <'c1', 'c2', ... 'ck'>()

ここで、n はソース文字シーケンス c1c2...ck です。

これは、1 が存在する場合 (unsigned long long パラメータ)、13_xx が 1 を呼び出し、それ以外の場合、13_xx が 2 を呼び出すことを示しています。

特に、それらは通常の関数や関数テンプレートのように検索され、同じオーバーロード解決規則に従います。

私の理解では、1 が存在しない場合、13_xx を暗黙的に double に変換して 3 を呼び出すことができます。

したがって、1 が存在しない場合、2 と 3 の両方が標準の説明から何らかの形で有効です。

誰かが私の疑問を解消するのを手伝ってくれることを願っています. どうもありがとう。

0 投票する
4 に答える
706 参照

c++ - 標準で事前定義されているユーザー定義リテラルはどれですか?

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

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

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

0 投票する
2 に答える
1784 参照

c++ - ユーザー定義リテラルはコンパイル時または実行時に解決されますか?

ULL、などの事前定義されたリテラルfはコンパイル時に明らかに解決されるので、疑問に思います。標準(2.14.8 [lex.ext])はこれを定義していないようですが、実行時に向かう傾向があるようです。

[2.14.8 / 2]
ユーザー定義リテラルは、リテラル演算子またはリテラル演算子テンプレート(13.5.8)の呼び出しとして扱われます。ud-suffix Xを使用した特定のユーザー定義リテラルLに対するこの呼び出しの形式を判別するために、リテラルサフィックス識別子がXであるliteral-operator-idは、非修飾名ルックアップのルールを使用してLのコンテキストでルックアップされます( 3.4.1)。このルックアップで見つかった宣言のセットをSとします。Sは空であってはならない。
(私の強調。)

13.37fただし、私には、これは不要なランタイムオーバーヘッドをもたらすように思われます。リテラルは、または"hello"_x_xユーザー定義リテラルはどこにあるか)のように、コンパイル時に使用可能な値にのみ追加できるためです。
次に、テンプレート化されたuser-defined-literalを取得しました。これは、標準のAFAICSでは実際には定義されません(つまり、例は示されていません。間違っていることを証明してください)。その関数はコンパイル時に何らかの形で魔法のように呼び出されますか、それともまだ実行時ですか?

0 投票する
4 に答える
1017 参照

c++11 - ユーザー定義のリテラル接尾辞、*_digit..."?

C++0xのユーザー定義リテラル サフィックスは、次の識別子にする必要があります。

  • (アンダースコア)で始まる_(17.6.4.3.5)
  • 大文字 で始めてはいけません(17.6.4.3.2)_

    [...] がアンダースコアで始まり、その後に大文字が続く各名前は、実装で使用するために予約されています。

_ そのようなサフィックスの後に数字が続かない理由はありますか? または?_4__3musketeers

0 投票する
3 に答える
926 参照

c++ - C++0x、フレンド演算子 ""() を使用したユーザー定義リテラル

operator "" (...)をフレンド関数として定義することは可能かつ/または有用ですか?

名前空間でのみ定義されるルールのため、特に「有用」について考えています。特に、でoperator ""始まる識別子_はグローバル名前空間で予約されているためです。これはfriendここでこの規則に違反していますか? ですから、このカプセル化が不十分であることに何のメリットもありませんよね?

0 投票する
4 に答える
246 参照

c++ - ユーザー定義リテラルは引数として関数を持つことができますか?

関数はユーザー定義のリテラルで使用できますか?

もしそうなら、どのようなシェナニガンを行うことができますか?これは合法ですか?

0 投票する
5 に答える
4778 参照

c++ - ユーザー定義のリテラル引数は constexpr ではありませんか?

ユーザー定義リテラルをテストしています。_fac数値の階乗を返すようにしたい。

関数を呼び出すことはconstexpr機能しますが、引数が ではなく、 ではないとコンパイラが不平を言うため、テンプレートでそれを行うことはできませんconstexpr

私はこれに混乱しています - リテラルは定数式ではありませんか? 5in5_facは常にコンパイル時に評価できるリテラルですが、なぜそれをそのまま使用できないのでしょうか?

最初の方法:

2 番目の方法:

0 投票する
2 に答える
2328 参照

c++ - ユーザー定義リテラルからの可変個引数のcharテンプレート引数を数値型に戻すにはどうすればよいですか?

この質問はこのために尋ねられています。

C ++ 11では、数値リテラルに対して次のようなリテラルを定義できます。

つまり503_suffix<'5','0','3'>

これは素晴らしいですが、それが入っている形ではあまり役に立ちません。

これを数値タイプに戻すにはどうすればよいですか?これはに変わり<'5','0','3'>ますconstexpr 503。さらに、浮動小数点リテラルでも機能する必要があります。または<'5','.','3>になりますint 5float 5.3

前の質問で部分的な解決策が見つかりましたが、整数以外では機能しません。