たとえば、次のことを考慮してください。
int sum(int a, int b)
{
return a + b;
}
対。
int sum(const int a, const int b)
{
return a + b;
}
2番目のアプローチは一般的に速いですか?
Cの関数パラメーターはコピーされて関数に送信されるため、関数内の変更が元の値に影響を与えることはありません。私の推論は、sum
上記の2番目の例では、コンパイラーは関数内で変更されていないことを確実に認識しているためa
、b
最初にコピーせずに元の値を渡すことができるということです。sum
そのため、2番目の方が最初の方より速いと思います。しかし、私は本当に知りません。上記の特定の単純な例ではsum
、違いがあったとしても最小限に抑える必要があります。
編集:sum
例は私のポイントを説明するためだけのものです。この特定の例では、大きな違いがあるとは思いません。const
しかし、もっと複雑な状況では、関数パラメーター内の修飾子をコンパイラーが利用して、関数を高速化できるのではないかと思います。コンパイラーが、パラメーターが関数内で変更されているかどうかを常に判断できるとは思えません(したがって、以下の2番目の質問)。const
したがって、修飾子が見つかった場合は、修飾子がない場合とは異なる動作をすることを期待しconst
ます。
質問:一般に、関数は、引数がそうでない場合よりも、引数がそうである場合の方が高速になりますconst
か?
質問2:一般に、Cコンパイラは(理論的には)関数パラメータが関数内で変更されているかどうかを常に判断できますか?