2012-02-29 7 views
9

私が理解しているように、constexprはテンプレートメタプログラミングとは異なりチューリングが完全ではないので、これらは同じではないと思います。ですから、constexprはどのくらいテンプレートのメタプログラミングを時代遅れにするのでしょうか?C++ 11のconstexprは、古くなったテンプレートのメタプログラミングですか?

+1

'constexpr'は完全にチューリングしています(明らかに無限の要件を無視しています)。 –

+0

@ R.MartinhoFernandes: 'constexpr'がチューリングが完了している場合は、' constexpr'だけを使って、両端で拡張可能な整数のリストをモデル化してください。 – kennytm

+0

@ R.MartinhoFernandes:あなたは、その回答をhttp://stackoverflow.com/questions/9201506/is-constexpr-based-computation-turing-completeに投稿することで興味深いかもしれません。 – kennytm

答えて

21

constexprは完全にチューリング完了です。再帰は許可されます。コンパイル時にも実行時にも機能する関数を定義する便利な方法です。 constexpr関数は単なる関数であり、型に対して操作を実行することはできません。

クラステンプレートとconstexprの両方を使用してコンパイル時の定数式を含めることができますが、類似点は終わりです(ただし、テンプレートメタプログラミングを使用して関数を定義する場合は除きます)。彼らは冗長ではなく、TMPはすぐに外に出ることはありません。

しかし、いくつかの特に醜いコンパイル時の計算は、適切な関数としてよりエレガントに書き直されるかもしれません。

+5

'constexpr'は型に対して動作できないという観測のために+1します。 –

+0

とてもよく説明してくれてありがとう... – polapts

関連する問題