回答編集履歴

2

インライン!

2016/02/02 10:03

投稿

raccy
raccy

スコア21735

test CHANGED
@@ -78,4 +78,4 @@
78
78
 
79
79
  補足
80
80
 
81
- catsforepawさんの回答の例で言うと、C言語の+演算子が参照透過であることをC言語のコンパイラが知っていますので、aとbが変わらない(その範囲内でaとbが参照透過である)ことをコンパイラが判断できれば、最適化してくれます。ですが、C++だと+演算子はオーバーロードによりどうなるかわかりませんし、他の一般的な関数ではその判断はほぼ不可能ですので、やはり過信は禁物です。
81
+ catsforepawさんの回答の例で言うと、C言語の+演算子が参照透過であることをC言語のコンパイラが知っていますので、aとbが変わらない(その範囲内でaとbが参照透過である)ことをコンパイラが判断できれば、最適化してくれます。ですが、C++オーバーロードされた+演算子や他の一般的な関数では、インライン展開が出来るなどの条件が揃わないとその判断が困難ですので、やはり過信は禁物です。

1

最後の文言を変更と補足追加

2016/02/02 10:03

投稿

raccy
raccy

スコア21735

test CHANGED
@@ -70,4 +70,12 @@
70
70
 
71
71
 
72
72
 
73
- なお、ほとんどの言語では、定数を除き、変数や関数が参照透過であることをコンパイラが判断することはできせん。そのため、上のような最適化はHaskellのような純粋関数型言語でしか期待できないでしょう。
73
+ なお、ほとんどの言語では、定数を除き、変数や関数が参照透過であることをコンパイラが判断することが難しいことがあり。そのため、上のような最適化はHaskellのような純粋関数型言語以外は過度の期待できないでしょう。
74
+
75
+
76
+
77
+ ---
78
+
79
+ 補足
80
+
81
+ catsforepawさんの回答の例で言うと、C言語の+演算子が参照透過であることをC言語のコンパイラが知っていますので、aとbが変わらない(その範囲内でaとbが参照透過である)ことをコンパイラが判断できれば、最適化してくれます。ですが、C++だと+演算子はオーバーロードによりどうなるかわかりませんし、他の一般的な関数ではその判断はほぼ不可能ですので、やはり過信は禁物です。