問題タブ [constexpr]
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内で非const変数を使用していますか?
したがって、三項演算子を使用した const/non-const に関する以前の質問に対してtest
、C++11 標準に関して次の関数は問題ありません。
全体の問題は、それ_constvar
が const であり、const で_var
ないことです。同じ関数を介してテンプレート パラメーターに応じてこれら 2 つのデータにアクセスする必要があり、const を使用するときにコンパイル時の関数が必要です。
test()
機能は要件を満たしていますか?
c++ - constexpr で使用される非 const : 標準は何と言っていますか?
C++11 iso 標準は、そのような式について何と言っていますか?
_x
で使用される非 const constexpr
: エラーが発生しますか、それともconstexpr
単純に無視されますか (非 const パラメーターを渡すときのように) ?
c++ - クラス内のC++constexprメンバーポインタ
クラスを使用して、テンプレートデータ構造のすべてのパラメーター、特に侵入型AVLツリーをグループ化しようとしています。ユーザーは次のようなことをします。
しかし、MyAvlTreeParamsのメンバーポインタに問題があります。このサンプルはそれを示しています:
これはclang++3.1で機能しますが、g++4.7.2は次のエラーでリンクできません。
エラーは、構造体Bの定義のどこかに次の宣言を追加することで修正されます(この質問を参照)。
私の場合、これがどのように問題になるかを確認するには、AVLツリーを使用するたびに次のすべてを追加する必要があります。
このような情報のないボイラープレートコードなしでこれを行う方法はありますか、またはパラメーターをグループ化するという同じ目標を達成する別の方法がありますか(つまり、すべてのメンバーをテンプレートパラメーターとして渡すだけではありません)?
c++ - コンパイル時のC++constexpr
この関数はコンパイル時にのみ評価する必要があると考えるのは正しいですか、それとも実行時のコストがかかりますか?
c++ - constexpr によってスローされた例外で副作用を使用することは合法ですか?
通常、constexpr には副作用があってはなりません。ただし、スローされた例外のコンストラクターで副作用を使用できることを発見しました。この手法は、次のプログラムで示されているように、constexpr 関数の assert() をエミュレートするために使用できます。
g++ 4.7.2 と clang++ 3.1 でテストしました。前提条件が失敗すると、エラーの場所とコア ダンプが取得されます。
現在のコンパイラで動作しますが、合法的な C++11 ですか?
c++ - コンパイル時に2つの型が同じかどうかを確認する方法(Boost strong typedefで動作する場合のボーナスポイント)
コンパイル時に2つの型が同じかどうかを確認できるかどうか疑問に思っていました。私が思いついたのは(ハックっぽい感じがするのでうまくいくかどうか、そしてIDK標準が良いのでIDKがテスト時に何を探すべきかということです)。
利用方法 :
そう
1) より良い方法はありますか?
2)関数ハックのこのアドレスは、標準で動作することが保証されていますか(私はそうではないでしょう:))?
c++ - コンパイラは無効な constexpr を強制的に拒否されますか?
(1) はコンパイル エラーにつながるに違いないと確信しています。(2) は実行時に失敗しますが、コンパイル時に拒否されてはならないことは確かです。
興味深いケースは constexpr 変数 (3) です。この単純な例では、gcc と clang は実際に式を評価するため、プログラムを拒否します。(エラー メッセージ: y は定数式ではありません)。
すべての C++11 コンパイラーはプログラムを拒否することを余儀なくされていますか? foo(false) をより複雑な式に置き換えたらどうなるでしょうか?
constexpr がチューリング完全ではないことを知って驚きましたが、これは仕様の変更後になります 。constexpr ベースの計算はチューリング完全ですか?
多分これは私の質問に関連しています。私の知る限り、コンパイラは、この例の constexpr (3) の実際の評価を実行時まで延期することが許可されています。しかし、constexpr がチューリング完全である場合、コンパイラがすべての constexpr に対して例外をスローするかどうか (つまり、constexpr が無効であることを意味します) を決定できるとは信じがたいと思います。
c++ - 可変個引数テンプレートに対する関数の計算
可変長型リストに対して関数を実装する最も慣用的な方法はどれかを理解しようとしています。たとえば、すべてのタイプの最大サイズを計算します。このようなタスクを達成するためのいくつかのアプローチがあることは理解していますが、どの戦略をいつ選択するかを知りたいです。
これらは私が検討するメカニズムです(他にも存在する可能性があります。存在する場合は言及してください):
型の特性 (理想的には using 宣言で簡潔に):
/li>
/li>constexpr
機能:
私の質問は 2 つあります。
どの戦略を選択するかを決定するのは、計算のどの機能ですか?
それぞれの場合、上記の最大サイズの例の実装例はどのようになりますか?
c++ - 2つの`constchar`文字列リテラルを連結します
?を使用して2つの文字列リテラルを連結することは可能constexpr
ですか?言い換えれば、次のようなコードでマクロを削除できますか?
更新:を使用しても問題はありませんが、これらのタイプのマクロを置き換えるために"\n"
使用できるかどうかを知りたいです。constexpr
c++ - constexprが不純な関数に対して機能する理由
constexprに関する私の古い質問の1つを閲覧しているときに、非常に(IMHO)重要なコメントに出くわしました。基本的にそれは要約すると:(これは合法的なC++11です:()
私の質問は、これが規格で許可されている理由は何ですか。私は参照透過性の大ファンなので、彼らに正当な理由があることを願っています:)そして私はそれを知りたいです。
ところで、関連するQがありますが、ほとんどのAは純粋なことについても言及していません。あるいは、そうするときに、stdがこれを許可する理由を指定していません。 constexprと純粋関数の関係