問題タブ [variable-templates]
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++ - constexpr 変数テンプレートを前方宣言する
constexpr
次のように変数テンプレートを前方宣言しようとしました。
目標は、すべての特殊化が必要であることを文書化することconstexpr
でしたが、それが合法であるかどうかを確認したことがなく、g++ はそれに満足していたことを認めなければなりません。しかし、代わりにこのスピンネットを clang++ でコンパイルしようとすると、次のエラーが発生しました。
エラーは理にかなっており、削除constexpr
すると消えるため、実際の問題ではありません。しかし、私は今興味があります: 標準constexpr
は変数テンプレートに対してそのような前方宣言を許可していますか?それとも違法ですか? g++ と clang++ は一致していないようで、必要に応じてどこにバグ レポートを提出すればよいか知りたいです。
どちらもconstepxr
、変数テンプレートではない前方宣言された変数について不平を言っているため、変数テンプレートのコンテキストがコンパイラの意見を異にしているようです。
c++ - constexpr 変数テンプレートでの nan/inf のシミュレーション
定数式で nan/inf をシミュレートする方法はありますか? C マクロ HUGE_VAL と INFINITY などを使用してください。さらに、それらを使用しても、まだ constexpr ではありません。
C++ 標準ライブラリまたは C 標準ライブラリが提供する標準関数を使用したくありません。
もちろん、以下はコンパイルされません。コンパイラは constexpr 変数を定数式で初期化する必要があると言います...
MSVC コンパイラが使用するメソッドもコンパイルされません。
これは大まかなことですが、これはライブラリ用であり、知識に基づいたアドバイスを探しています! ありがとう!
c++ - テンプレート変数を定義せずに宣言することはできません
ヘッダー ファイルで変数テンプレートを前方宣言し、実際のインスタンス化を別のコンパイル ユニットで行いたいと考えています。
私は、C++14 の変数テンプレートは静的クラス変数と非常によく似ていると考えるようになりました。残念ながら、これはまったく当てはまらないようで、変数テンプレートを前方宣言することを妨げています。
上記のコード サンプルは、GCC でそのままコンパイルおよび実行されます。ただし、10 行目のコメントを外すと、コンパイル時にエラーが発生します。
c++ - 変数テンプレートのオーバーヘッド
C++14 では、変数テンプレート (変数テンプレート) が導入されました。
実行時のバイナリ メモリ フットプリントと速度の両方に関して、これを使用するオーバーヘッドはどのくらいですか?
c++ - 変数テンプレートのリンクに失敗する
次のコード:
Linux で gcc バージョン 5.1.0 を使用してコンパイル
リンク手順中に次のメッセージが表示されて失敗します。
単項マイナス (コードの意味が変わります) を削除すると、リンク エラーが解消されます。先頭にゼロを追加すると (コードの意味は変わりません)、エラーも解消されます。次の 2 つの実装によりfoo
、コンパイルが成功します。
他のコンパイラではこの動作は見られません。元のコード (単項マイナスを含む) は、clang 3.6.0 と gcc 5.2.0 を使用して正常にコンパイルおよび実行されます。
これを gcc 5.1.0 のバグとして提出する前に、この動作に対するあなたの意見を聞きたいです。
templates - Variadic Template Pack を関数仕様として与える
テンプレートパックの特殊化 (パラメーターなし) を持つ関数を作成しようとしていますが、関数の特殊化によって他の何かが出力されて停止する最後のメッセージまで、メッセージが出力されます。説明が本当に下手なので、ここに私がやろうとしていることのコードを投稿します。
最初の注意として、私はこれが機能しないことを知っていますUpdateStuff<TT...>();
.オーバーロードされた関数へのあいまいな呼び出しを生成します.関数UpdateStuff()
パラメータのようなものUpdateStuff(T first, TT... second)
と特殊化を1つだけ与えることで機能させるUpdateStuff(T first)
ことができましたが、これが可能かどうかを知りたいfunction parameters 、質問の要約を示します。
UpdateStuff<TT...>();
TT がdouble
コンパイル時だけの場合、最初の関数を使用しないのはなぜですか?- 関数パラメーターなしで達成しようとしていることを実行することは可能ですか?
事前に感謝します。私の質問に関連する何かを理解していない場合は、より詳しく説明していただければ幸いです。私の下手な英語で申し訳ありません。