問題タブ [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.

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

c++ - 静的サイズの valarray 実装

std::valarray静的サイズの実装を探しています。

自分で実装するのは簡単なはずですが、constexpr 演算 (合計、減算など) が必要で、それはちょっと退屈でエラーが発生しやすいので、一般的な実装があるかどうかをここで尋ねます。

これを自分で実装する必要がある場合、この場合、式テンプレートは価値があると思いますか?

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

c++ - ユーザー定義リテラルを使用してconstexpr配列を初期化します

簡易版

配列が定義されている行ではリテラルが理解されないため、これはうまくいきません。ただし、Cが不明なため、フリーリテラル関数を先に移動することはできません。

可変個引数テンプレートまたはそのような恐ろしいものをコードに追加することを含まない、このゴーディアンノットの解決策はありますか?

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

c++ - constexpr:リテラルクラスタイプのコピー動作

次のコードを見てみましょう。

次の両方の行:

次のエラーが発生しますg++ 4.7

`test::USER'への未定義の参照

のインスタンスがないことを認識していますtest::USER。(行は意図的にコメントされています)


2つの質問があります:

  1. 関数を呼び出すためにtest::USERの明示的なインスタンスが必要ないのに、の明示的なインスタンスが必要なのはなぜですか?test::NATIVEpass_by_copie

  2. コンパイラがで呼び出すときに、同じコピーを自分で暗黙的に作成できない(または望まない)ときにpass_by_rvalue_ref、一時コピーを明示的に作成して呼び出すことができるのはなぜですか?test::USERpass_by_copietest::USER

ありがとうございました

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

c++ - C++でコンパイル時の反映をシミュレートする

私は次の構造体を持っています:

constexpr次のように文字列名でメンバーの1つを選択したい

getMemberはconstexprfunction/struct / macros /問題のすべてであり、式は単純に最適化する必要があります(私はそれを望んでいます)auto& member = instance.firstMember;getMemberここでの私の望みは、別の関数から呼び出すことができるようにすることですconstexpr。この関数は、特定のメンバーの名前を計算します->ある種のコンパイル時の反映です。

私は知っています、C ++には反映がないので、問題の構造体のメンバーの名前をなんらかの方法で登録してもかまいません(部分的に特殊化しますか?いくつかのマクロを使用しますか?)。

私が欲しいのは、コンパイル時の最適化を行い、実行時に何もしないことです。それはC++11で可能ですか?

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

c++ - 関数内の静的constexpr変数は意味がありますか?

関数内に変数(たとえば、大きな配列)がある場合、それを宣言することは意味がstaticありconstexprますか?constexpr配列がコンパイル時に作成されることを保証するので、static役に立たないでしょうか?

生成されたコードまたはセマンティクスに関して、static実際にそこで何かを行っていますか?

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

c++ - コンパイル時型変換チェック(constexprおよびユーザー定義リテラル)

更新:私は以下に自分の答えを投稿 しましたそしてこの問題のより長いバージョンがここにあります:http ://scrupulousabstractions.tumblr.com/post/38460349771/c-11-type-safe-use-of-integer-user-defined-リテラル

質問:

値をunsignedlonglongとして取得する単純なconstexprユーザー定義リテラルを作成しました(これが、ユーザー定義の数値リテラルの動作方法です:http: //en.cppreference.com/w/cpp/language/user_literal)。値がsignedlonglongに収まるようにしてください。_X

それはすべてうまく機能します(値が大きすぎるとコンパイルエラーが発生します)が、次のような変数を明示的に作成した場合に限ります

代わりに私が次のような典型的なものを書く場合

テストはコンパイル時に実行されません。

  • constexpr関数は、constexpr変数に割り当てられている場合にのみ、コンパイル時に実行されますか?(私はそれを標準で見つけることができませんでした)

  • _X私が探しているものの安全な行動を達成することは可能ですか?

完全な例:

ああ、参考までに:私はgcc4.7.2を使用しました。

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

c++ - constexpr関数がラムダを返さないのはなぜですか?

このコードは機能しないことがわかりました。

エラーが発生します

何故ですか?ここでは呼んでいません。

直接的なアプローチは機能します:

私はMinGWをg++バージョン4.7.2で使用しています。

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

c++ - クラス メンバーと constexpr リンク時の最適化を含む C++11 列挙型

私のプロジェクトには、列挙メンバーに関連付けられた追加の属性と、列挙型に関連付けられた補助静的メソッドが必要な列挙がたくさんあります。

私の知る限り、これは標準の列挙型クラス MyItem {...} では実現できないため、プロジェクトの列挙型クラスごとに、これらの補助静的メソッドをカプセル化し、補助インスタンスのインスタンス化も行う補助クラス MyItemEnum を用意しています。そのため、追加の属性を取得するためにそれらのメソッドにアクセスできます。

以下に例を示します (可能な限り単純化されていますが、説明するすべての機能はそこにとどまっていると思います)。

MyItem.h

意味は明らかで、ここで .cpp 部分を提供する必要はないと思います... MyItem をインターフェイスで渡される引数として使用し、拡張機能にアクセスする必要がある場合は MyItemEnum を使用します。

私の最初の質問は、上記のアプローチは大丈夫ですか、それともまったく別のものを検討する必要がありますか?

私の 2 番目の質問は、constexpr を使用して実行しようとしているこの列挙の最適化に関するものです。

それはコンパイルされますが、どうやら constexpr を使用する機会がないようです。

そのため、コンパイラは Item1 がどの値でインスタンス化されたかを知りません。 リンク時の最適化中に上記の式が constexpr として評価される可能性はありますか? あるいは、私は使用することができます

これにより、constexpr コンパイル時の最適化がアクティブになりますが、場合によっては、constexpr をコンパイル時に評価できない場合、コンパイラは MyItemEnum のローカル インスタンスを作成する必要があります(単一のグローバルへの参照を使用する代わりに)。静的インスタンス) これがパフォーマンスの低下につながるのではないかと心配しています (私の実際の列挙型には単一のメンバーよりも多くの属性があるため、ローカルのインスタンス化に時間がかかることがありますか?)。これは正当な懸念ですか?

0 投票する
10 に答える
279081 参照

c++ - `constexpr`と`const`の違い

constexprとの違いは何constですか?

  • そのうちの1つだけを使用できるのはいつですか?
  • いつ両方を使用でき、どのように選択すればよいですか?
0 投票する
1 に答える
201 参照

c++ - コンパイラは、constexpr 関数の「取られなかった」分岐の評価を省略できますか?

Mehrdadの質問に答えようとして、以下の小さな関数を作成しました ( liveworkspaceで動作中):

exists( O(1)はどこですか)

ただし、コンパイルは(ライブワークスペース上で)非常に遅く、広い範囲を使用しようとすると、コンパイラがクラッシュして完全に失敗します([0, ~0u]動作しません...)。

再帰を正しく実装できたと思います(矛盾しているとうれしいです)が、それでも...

したがって、質問:ここでさまざまな三項演算子呼び出しを評価するとき、コンパイラは not-taken 分岐の計算を省略できますか?