質問: C++言語の値渡しと参照渡しについての質問があります。
回答: 『どのような時に参照渡しとしなければならないのか』 コピーが作れない時です。 作る方法が不明な時と、本当に無理な時の2種類が考えられます。 『例えば、2つの値を交換する関数であれば参照渡しにしなければならないのだと思いますが』 ですね。 それは目的に由来しています。「交換する」ということなので。 でも、上記のようにコピーが作れないとか、作る方法が不明とか、そういった場合は形式的に他に選択肢が無いです。(ポインタで対処できますが、参照とポインタとを同じものとする立場でのお話です。) 『参照渡しでなければならないような関数の例を教えていただきたいです』 ikt********さんのお話の通りです。 std::ostream のコピーを引数に渡すとか、そういうことは出来ませんので。 《参考》 「参照渡しとしなければならない」のではないけれども、「参照渡し」が常識となる場面が多々あります。 こうお考え下さい。 クラスや構造体のインスタンスを渡すときは参照。 void f(const std::vector& a) { for (const auto& i : a) std::cout << i << std::endl; } こんな感じです。std::vector のコピーは作ることが出来ます。でも、無駄ですよね。そういう無駄は避けるのが当たり前です。なので上記のように参照にするのが常識となっています。 for 文で const auto& としました。これは const auto でも良かったのですけどね。int でも良いですよ。単なる習慣です。int 型以外に変更したくなったとき、どのように書いてあれば都合が良いのかは明らかですよね。