実装1:
foo(const Bar x);
実装2:
foo(const Bar & x);
関数内でオブジェクトが変更されない場合、なぜそれをコピーするのでしょうか(実装1)。
これはコンパイラによって自動的に最適化されますか?
概要:オブジェクトはconst
関数宣言のように宣言されていますが、他のエイリアスを介してオブジェクトを編集することは可能です&
。
あなたがライブラリを書いている人であり、あなたの関数がそれを行わないこと、またはオブジェクトがすべての操作の間接参照コストを正当化するのに十分な大きさであることを知っている場合、それ
foo(const Bar & x);
は進むべき道です。
パート2:
これはコンパイラによって自動的に最適化されますか?
それらが常に同等であるとは限らず、同等の条件が自明ではないことを確立したので、コンパイラがそれらを保証することは一般に非常に困難であり、ほぼ確実に