問題タブ [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.
c++ - ユニット用のC++で利用可能な「リテラルサフィックスコード」
C ++ 1xは、リテラルサフィックスをサポートします(cmp。例:http ://ecn.channel9.msdn.com/events/GoingNative12/GN12Cpp11Style.pdf )。gcc 4.7を使用していますが、システムにいくつかのユニットを導入したいと思います。最も注目すべきは、コードの半分が度を使用し、残りの半分がラジアンを使用していることです(さまざまなサードパーティライブラリのため)。明らかに、これは常に間違いの原因です。たとえば、「ラジアン角度=90_deg;」と言うことができます。とても役に立ちます。
これを実装する方法を調べましたが、実行可能に見えますが、すべてを正しく行うには時間がかかります。ですから、使用できるこれらすべてをすでに実装している完成した/テスト済みの実装があるかどうか疑問に思います(すべてのC ++開発者がそれを再実装する必要はありませんか?)。ラジアン/度以外に、長さの測定値(mm、cm、m)を探しています。私はすでにグーグルで検索しましたが、使用できるものは見つかりませんでした。
使用できるSIシステムなどの実装を知っている人はいますか?
c++ - 整数値を浮動小数点のユーザー定義リテラルに渡す必要がありますか?
私はユーザー定義リテラル(GCC 4.7を使用)で遊んでいます。
これは、浮動小数点リテラル(eg 42.0_lb
)を渡す場合は正常に機能しますが、整数リテラル(eg 42_lb
)を渡そうとすると、次のエラーが発生します。
エラー:数値リテラル演算子'operator ""_lb'が見つかりません
私の定義は、(通常の関数の場合のように)_lb
パラメーター間で暗黙の変換を引き起こすべきではありませんか?long double
c++ - 空のデストラクタとリテラル デストラクタ
次のコードを検討してください。
この行を削除すると、コードは正常にコンパイルされますが、空のデストラクタを定義すると、それが非リテラルHERE
であるというコンパイル エラーが発生します。Test
空のデストラクタとまったくないデストラクタの違いはなぜですか?
編集:別の関連する質問:空のデストラクタとリテラルデストラクタが異なる場合、保護されたリテラルデストラクタを定義する方法は?
c++ - 数値リテラル演算子エラー
このコードはなぜですか?
これらのエラーのうち5つを生成します。
エラー:数値リテラル演算子'operator ""_deg'が見つかりません
GCC4.7.3を使用しています。(arm-none-eabi-g++
、-std=c++0x
フラグ付き)。
c++ - バイナリリテラルの型変換
次のコードを書きました。
意図したとおり、このコードを使用すると、いくつかの (いわゆる) 「オペコード」のシーケンスを作成できます。ただし、数値リテラル0b00000000
は int として扱われます。これは、最終的に、より大きな符号付き整数型からより小さな符号なし整数型への変換があるという事実につながります。望ましくない副作用が生じる可能性があります。C++ では、サイズが 1 バイトの符号なし整数型を示すサフィックスはありません。純粋なC++11を使用してこれを回避するにはどうすればよいですか? これはコードの肥大化 (複数の括弧と-wrapper 関数static_cast
に名前を付けるための少なくとも 1 つの記号) につながるため、 および他のものは使用したくありません。static_cast
解決策は、ユーザー定義のリテラル、たとえば0b00000000_op
、より見栄えの良いを使用することですo(0b00000000)
。ただし、演算子は次のような関数テンプレートである必要があります。
しかし、C++11にはそのような構文はありません...そしてT
もしあればテンプレートパラメータをどうするのですか?
c++ - c ++ 11で負のUDLを定義するにはどうすればよいですか(許可されていませんか?)?
否定的なユーザー定義リテラルが許可されているかどうかさえわかりません。そうでない場合、なぜ彼らは除外されたのですか?
たとえば、私は使用したいと思います:
これは私がgcc4.7.2を使って試したものです:
エラー
c++ - 単一のユーザー定義リテラルに基づいて、リテラル定義を自動的に追加する方法は?
C++11
ユーザー定義リテラルを提供します。私はそれらをいじり始めたばかりですが、定義した単一のリテラルにすべてのSI 乗数を自動的に追加できるかどうか疑問に思いました。
たとえば、私が定義した場合
whereLength
はいくつかの基本クラスのサブクラスです。を返すすべてのリテラルに対して(ブースト演算子と同じ精神で) SI 乗数を自動的Units
に追加するメカニズムが必要です。Length
私が見る限り、おそらくいくつかのマクロ マジックを除けば、すべてのユーザー定義リテラルには明示的な定義が必要なため、これを自動的に行う方法はありません。
..または私は何かを見落としていますか?
c++ - 型控除のための代入演算子のオーバーロード
ideoneコードは次のとおりです:http://ideone.com/Qp8Eqg
私の質問は、左辺値のみに基づいて変換を強制することは可能ですか?例えば、
明らかに、2_h.toSeconds()のようなものを作成する必要がありますが、それは冗長すぎて、アイデアを実現できません。
c++ - C++ でコンパイル時の文字列を便利に宣言する
C++ でコンパイル時に文字列を作成および操作できることには、いくつかの便利なアプリケーションがあります。C++ でコンパイル時の文字列を作成することは可能ですが、文字列を文字の可変長シーケンスとして宣言する必要があるため、プロセスは非常に面倒です。
文字列の連結、部分文字列の抽出などの操作は、文字列に対する操作として簡単に実装できます。コンパイル時の文字列をより便利に宣言することは可能ですか? そうでない場合、コンパイル時の文字列の便利な宣言を可能にする提案が進行中ですか?
既存のアプローチが失敗する理由
理想的には、次のようにコンパイル時の文字列を宣言できるようにしたいと考えています。
または、ユーザー定義リテラルを使用して、
どこdecltype(str2)
にconstexpr
コンストラクタがありますか。次のことができるという事実を利用して、アプローチ 1 のより複雑なバージョンを実装することが可能です。
ただし、配列には外部リンケージが必要になるため、アプローチ 1 を機能させるには、次のように記述する必要があります。
言うまでもなく、これは非常に不便です。アプローチ 2 は、実際には実装できません。( ) リテラル演算子を宣言する場合constexpr
、戻り値の型をどのように指定しますか? 可変長の文字シーケンスを返す演算子が必要なので、const char*
パラメーターを使用して戻り値の型を指定する必要があります。
s
ではないため、コンパイル エラーが発生しますconstexpr
。以下を実行してこれを回避しようとしても、あまり役に立ちません。
標準では、この特定のリテラル演算子形式は整数型と浮動小数点型用に予約されていると規定されています。うまくいきます123_s
が、そうでabc_s
はありません。ユーザー定義のリテラルを完全に捨てて、通常のconstexpr
関数だけを使用するとどうなるでしょうか?
前と同じように、配列 (現在はconstexpr
関数のパラメーター) 自体がもはやconstexpr
型ではないという問題に遭遇します。
文字列と文字列のサイズを引数として取り、文字列内の文字からなるシーケンスを返す C プリプロセッサ マクロを定義できるはずだと思います (. 、文字列化BOOST_PP_FOR
、配列添字などを使用)。ただし、そのようなマクロを実装する時間 (または十分な関心) がありません =)