重複の可能性:
C++ では、値渡しと定数参照渡しのどちらが優れていますか?
C++ での値渡し、ポインター渡し、参照渡しの違いを認識しており、C++ で (const 参照ではなく) 値渡しでオブジェクトを渡すことは、ほぼ常にプログラミング エラーであると考えています。
void foo(Obj o); ... // Bad
void foo(const Obj &o); ... // Better
const 参照の代わりに値渡しが適切であると考えられる唯一のケースは、オブジェクトが参照より小さい場合であり、したがって値渡しの方が効率的です。
しかし、確かにこれは、コンパイラが決定するように構築されているようなものですか?
C++ が実際に値渡しと const 参照渡しを必要とするのはなぜですか?また、必要に応じて、コンパイラは呼び出しを const 参照へ (およびから) 自動的に変換することが許可されていますか?
((たとえば)値と参照の違いについて尋ねるC++呼び出し規約の質問は数百あるようですが、「なぜ?」と尋ねる質問は見つかりませんでした。)