問題タブ [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 投票する
1 に答える
1383 参照

c++ - リテラル演算子テンプレート: 文字列ではないのはなぜですか?

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

例として:

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

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

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

0 投票する
0 に答える
50 参照

c++ - Clang と GCC でユーザー定義の整数リテラルに対するメンバー アクセス式の解析にバグはありますか?

次のコードは有効な C++ のように見え、すべての主要なコンパイラで受け入れられます。

ただし、以下はClangGCCの両方のトランク バージョンで拒否されます(VC14 では受け入れられます)。

問題のある行をに変更する(42s).count()42s .count()、問題を修正します。同様の状況が複雑な UDL で発生します (ここでもClangGCCによって拒否され、VC によって受け入れられます)。

Clang と GCC での整数リテラルの解析にバグはありますか?

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

c++ - ユーザー定義のリテラルで C++14 の桁区切り記号を使用できますか?

clang は次の行をコンパイルしますが、g++ 6.1 は桁区切り記号について不平を言います ( Coliru のライブ例を参照)。

C++14 標準 (N3796) に従って正しいコンパイラはどれですか?

それ以外の場合、桁区切り記号 (§2.14.2) は、<chrono>ライブラリ (§20.12.5.8) のユーザー定義リテラル (§2.14.8) の実装の詳細にすぎませんか? unsigned long longこれらのリテラルはパラメーターで定義されているため、私見ではありません。

Howard HinnantがCppCon 2016 のトーク "A tutorial" (トークの約 42 分) で10'000s例として使用したことを覚えています。<chrono>


( 8 進リテラル 0123 は 64 + 16 + 3 == 83 であるため、 「1 分 23 秒」をコード化するつもりはなかったことに注意してください。これは偶然に正しいだけです。その目的のために、次のように記述します。

しかし、その誤解を招く可能性のある解釈は問題の一部ではありません.)

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

c++ - ユーザー定義リテラルは桁区切り記号とどのように連携しますか?

可変個引数テンプレートによって解析されたユーザー定義のリテラルに桁区切り記号を追加することで、コードの古い例を変更したところです。

g++6.2.0で をインスタンス化しようとしたとき、私は驚きましたbin<'\''>。それは私のテンプレートに'as aを渡そうとしました! 同じ苦情でclang++-3.9msvc++-19.00を試してみましたが、本当に懐疑的です。chartemplate<char...CS> int operator"" _bin()

それは正しい行動ではないかもしれないと感じています。私のリテラルが引用符で囲まれていれば理解できたでしょうが"1000'0000"_bin、このフォームはテンプレート演算子 "" には存在しませんよね?

'テンプレートのユーザーリテラル演算子にも桁区切り記号が必要ですか?

更新 1:問題がない場合':

あらゆる種類のもの、たとえば複素数の sep として digit-sep を使用できます。52.84+67.12iに対する「52.84'67.12_i' の動作は明確に定義されていますか?」

Udpdate 2:いくつかのコメントの反応として。以下がコンパイルされます。

出力は次のとおりです。

これは、テンプレートがすべての文字を取得することを意味します: 接頭辞と桁区切り文字 - それらすべて。(g++-6.2.0)

@krzaqの答えが示唆するように、これはStdの計画であるように見えるので、それに頼ることができます。

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

c++ - 任意の型の C++ ユーザー定義リテラル

現在のところ、ユーザー定義のリテラルは、限られた型のセットを入力パラメーターとして受け入れます (こちらを参照)。入力パラメーターとして任意の型を受け入れる計画はありますか?そうでない場合、それはなぜですか?

たとえば、std::chrono::duration を異なる形式 (秒、ミリ秒など) で取得できるようにしたい場合は、次のようにします。

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

c++ - [std::operator""s] を名前空間で見えるようにする方法は?

エラーメッセージは次のとおりです。

エラー : タイプ 'unsigned long long' または 'const char *' の引数を持つ 'operator""s' の呼び出しに一致するリテラル演算子がなく、一致するリテラル演算子テンプレートもありません std::chrono::seconds d = 0s;

私の質問は:

use namespace std;入りたくありませんnamespace Y。では、どのようにstd::operator""s見えるようにすればよいnamespace Yですか?

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

c++ - 予約済み識別子を使用する場合、using コマンドは警告を発行する必要がありますか?

回線を利用する場合

g++ 6.3.0 では、コンパイラは次のような警告を発行します。

警告: 「_」が前に付いていないリテラル演算子サフィックスは、将来の標準化のために予約されています

MSVS でも同様の警告が発行されます。ただし、clang 3.8.0 ではそのような警告は発行されません。

は chrono ライブラリの標準で定義されているためoperator""s、名前を定義するのではなく名前をインポートするだけなので、これは警告を出すべきではありませんか?

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

c++ - ユーザー定義リテラルをテンプレート化できますか?

いくつかのクラスがあるとします:

Fooそして、オブジェクトを作成するユーザー定義のリテラルをいくつか提供します。

私の質問は次のとおりです。これらをテンプレート化して、コードを書き直す必要がないのはなぜですか?

gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) および 7.0.0 (自分でコンパイル) レポート:

エラー メッセージは十分に明確に見えますが、原則としてこれを許可してはならない理由がわかりません。それで、私はこれを間違ってやっていますか、それとも本当に許可されていませんか?