"背後で"何が起こるかのセマンティクスがかなり異なるためです。
class Person1 {
std::string f_name, l_name;
public:
Person(std::string first_name, std::string last_name) :
f_name(first_name), l_name(last_name) {
}
};
class Person2 {
std::string f_name, l_name;
public:
Person(const std::string & first_name, const std::string & last_name) :
f_name(first_name), l_name(last_name) {
}
};
あなたがPerson1
のインスタンスを構築
は、名前は、それが二回コピーされます初期化するために使用される:最初のコンストラクタでローカル変数を開始すること、第二には、メンバ変数にコピーし、構築します。しかし、
Person2
では、メンバー変数へのコピー構成が発生したときに1つのコピーしか発生しません。
このような単純な例では、これがパフォーマンスとメモリの重要な意味を表すことは明らかではないかもしれませんが、より複雑なプログラムでは、これはかなり重要な意味を持ちます。
これはあまりコードです。しかし、実際にはユースケースに依存します。 – NathanOliver
一般的な関数に値を渡して引数を渡すのと比べて、引数を渡すことと変わりありません。このトピックに関する情報は不足していません。 – SergeyA
'first_name'と' last_name'がオブジェクトに格納される場合、コードを単純化しながら*効率的*であるため、2番目の(つまり非const *非ref *)バージョン*を優先します。それは直感的ではないように思えますが、慎重に考えれば、それは実際に効率的であるとわかります。同時に、コードを簡素化します。 – Nawaz