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