私が理解しているように、constexpr
はテンプレートメタプログラミングとは異なりチューリングが完全ではないので、これらは同じではないと思います。ですから、constexpr
はどのくらいテンプレートのメタプログラミングを時代遅れにするのでしょうか?C++ 11のconstexprは、古くなったテンプレートのメタプログラミングですか?
9
A
答えて
21
constexpr
は完全にチューリング完了です。再帰は許可されます。コンパイル時にも実行時にも機能する関数を定義する便利な方法です。 constexpr
関数は単なる関数であり、型に対して操作を実行することはできません。
クラステンプレートとconstexpr
の両方を使用してコンパイル時の定数式を含めることができますが、類似点は終わりです(ただし、テンプレートメタプログラミングを使用して関数を定義する場合は除きます)。彼らは冗長ではなく、TMPはすぐに外に出ることはありません。
しかし、いくつかの特に醜いコンパイル時の計算は、適切な関数としてよりエレガントに書き直されるかもしれません。
+5
'constexpr'は型に対して動作できないという観測のために+1します。 –
+0
とてもよく説明してくれてありがとう... – polapts
関連する問題
- 1. 構築constexprのテンプレート構造体(C++ 11)
- 2. C++ 11とC++ 14のconstexpr
- 3. テンプレートtypedefがC++(C++ 11ではなく)で問題になっています
- 4. テンプレートのメタプログラミングは同等のCコードより高速ですか?
- 5. C++ 11 constexpr文字列の実装
- 6. 静的const vs constexprメンバーフィールドはC++ 11/14でですか?
- 7. doubleのビットパターンをチェックする方法はC++ 11のconstexprでは0x0ですか?
- 8. プリプロセッサを使ったメタプログラミングC/C++
- 9. テンプレート - メタプログラミング、constexprまたはマクロを使用してコンパイル時にデータ構造を構築する
- 10. テンプレート/ constexpr/C++ 11のXマクロを置き換える方法はありますか?
- 11. 我々は<code>constexpr</code>を取得するC++ 11では、コンパイル時のconstexprの
- 12. C++ 11のテンプレートのサブタイプ
- 13. std :: mapの初期化にC++ 11のconstexprを使用する
- 14. テンプレート控除:C++ 11
- 15. なぜJavaメタプログラミングのサポートは良くないのですか?
- 16. ルアで古くなったC++リファレンスを検出する
- 17. C++ 11 Xcodeエラー:予期しないunqualified-id constexpr
- 18. トランポリンは、C++メタプログラミング
- 19. C++ 11 constexprとの互換性の実装
- 20. C++プリプロセッサはメタプログラミングTuring-completeですか?
- 21. オーバーロードされたテンプレート関数のConstexprエイリアス
- 22. 私はメタプログラミングの本の中で、この作業コード見つかっこのメタプログラミング
- 23. gulp livereloadは古くなったCSSファイル
- 24. オンラインチャット:ASPリモートスクリプトは古くなった
- 25. シンプルなメタプログラミングいくつかのゲッターを
- 26. クラスパスの古くなったJar Databricks
- 27. Google Playサービスの古くなったエラー
- 28. EVaultバックアップのステータスが古くなった
- 29. プロジェクトタンゴのデバイスが古くなった
- 30. Oracleオプティマイザの古くなった統計
'constexpr'は完全にチューリングしています(明らかに無限の要件を無視しています)。 –
@ R.MartinhoFernandes: 'constexpr'がチューリングが完了している場合は、' constexpr'だけを使って、両端で拡張可能な整数のリストをモデル化してください。 – kennytm
@ R.MartinhoFernandes:あなたは、その回答をhttp://stackoverflow.com/questions/9201506/is-constexpr-based-computation-turing-completeに投稿することで興味深いかもしれません。 – kennytm