teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

訂正

2016/03/16 12:47

投稿

catsforepaw
catsforepaw

スコア5944

answer CHANGED
@@ -6,4 +6,12 @@
6
6
  > 逆に、複雑なことをする必要がないクラスならconstexprにできるので、実行速度を向上させることができる、と考えることができるのかもしれません。
7
7
 
8
8
  これはあまり正しい認識ではないです。`constexpr`指定可能なコードであれば、`constexpr`がなくても最適化によりコンパイル時点で結果が求まります。いわゆるテンプレートメタプログラミングに代表されるようなコンパイル時点で結果を求める手法はすでに存在していますから。
9
- ただ、`constexpr`を使えば、テンプレートメタプログラミングよりも直感的にコードが書けるという利点はあります。
9
+ ただ、`constexpr`を使えば、テンプレートメタプログラミングよりも直感的にコードが書けるという利点はあります。
10
+
11
+ ---
12
+ 訂正
13
+ 他の環境では試していませんが、VC++で試したところ、再帰呼び出しなどの複雑な関数では`constexpr`を付けるか付けないかで結果が変わりました。付けると定数に置き換わりますが、付けないと関数呼び出しになっていました。どうやら最適化のロジックにも影響を及ぼしているようです。
14
+
15
+ テンプレートメタプログラミングの例があるのでばっちり最適化してくれると思い込んでいたのですが、よく考えたら、テンプレートメタプログラミングは再帰呼び出しではなく、「メンバ変数の再帰的な使用」なので、ちょっと違っていますね。
16
+
17
+ その意味では、「実行速度を向上させることが目的」というのも間違いではないようです。