問題タブ [constant-expression]

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 に答える
617 参照

c++ - 定数式の条件演算子

MSVC 10 で次のコード スニペットを試してみましたが、問題なく動作します。

私が知りたいのは、C++ 標準 (できれば C++98) では、すべてのオペランドが定数式である場合、定数式で条件演算子を使用できるか、またはこれは Microsoft の癖/拡張機能ですか?

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

.net - 式ツリー ローカル変数をキャプチャする方法

私は現在、動的表現の作成に取り組んでおり、次のシナリオを達成するのを助けたいと思っています。

与えられた:

したがって、私の問題は、MakeDynamicPredicate から返された述語を、MakePredicate 関数によって生成されたものと等しくすることができないことです。

Jon Skeet からの返信投稿を読みましたが、ローカル変数がキャプチャされるように ConstantExpression を実装する方法がわかりません...

どんな助けでも大歓迎です。

追加情報: 今後、使用されているクラスがわからない可能性があるため、最終的には抽象化されてより一般的になります。

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

c++ - ブール定数式での冗長なインスタンス化

n-any ブール型ORランタイム関数がありますany_run

コンパイル時のアナログと同様にany_comp

どちらにも、最初の引数が true であることを確認するためのアサーション (それぞれ実行時またはコンパイル時) が含まれています。

次の入力を与える

実行時のアサーションは決して失敗しませんが、コンパイル時のアサーションは失敗します。これは、any_run(false, false)呼び出されることはありany_comp <_false, _false>ませんが、インスタンス化されることを意味します。

をインスタンス化せずにtrueifと評価できます。A() == trueany_comp <B...>

私の質問は、この実験とその結論が有効かどうか、そして標準がそれについて何と言うかということです.

結論が有効である場合、コンパイルを高速化するために、いくつかのコンパイル時関数をより慎重に (より特殊化して) 再実装する必要があるため、これは重要です。

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

c++ - より簡潔な呼び出しのために、コンパイル時のゲッターを実装する方法は?

呼び出しをより簡潔にする方法でコンパイル時のゲッターを実装したいと考えています。から再帰的に継承する非型 ( unsigned int N) クラス テンプレートがあります。Everyには と呼ばれる独自のメンバーがあり、対応する の値に初期化されます。ベースケースは. たとえば、オブジェクトにはと呼ばれる 6 つの があり、を通じて値が付けられます。コンパイル時の getter を実装したいのですが、プロトタイプの先頭に a を追加するほど簡単ではありません。foofoo<N - 1>fooenumnumberNfoo<0>foo<5>enumnumber05atconstexpr

g++ 4.8 では、エラーのインスタンスがいくつか発生します: error: 'index' is not a constant expression、とりわけ。残りはただ従うだけです。すべてのクライアント コードがat整数リテラルのみで呼び出した場合でも、getter はコンパイルされません。なんで?

いずれにせよ、私の解決策は、コンパイル時の整数ラッパーを実装することでした。これは単純に非型 ( unsigned int N) クラス テンプレートctint(コンパイル時 int の略) であり、そのenumメンバーmemは次のように初期化されますN

したがって、foo<N>およびfoo<0>の getter メソッドをそれぞれ次のように置き換えます。

作品:

しかし、関数呼び出しを冗長にします。<iostream>何かが機能することを示すが、それを機能させるのに役立たない部分 (例: ) を除いて、ライブラリを使用しない実装が必要です。<>ゲッターが、呼び出しで型名をオプションで省略したり、構文やスペルを省略したりできるようにしたいのですが、プロトタイプや定義では必須ではありません。sを巻き込みたくないarray[]。それが無理なら次善の策を知りたいです。