2016-12-01 15 views
0

私はC++初心者です。私は電話帳をシミュレートするプログラムに取り組んでいます。さて、挿入操作のために、関数は次のように定義されます。C++リファレンスを使用する理由

void PhoneBook::insert(const string& name, const string& number) 

をしかし、私は参照シンボルを削除する場合、それはまだだけでなく、接触に動作して挿入します。だから私はここでちょっと混乱しています、なぜ私はそれらを必要としますか?ここで

void PhoneBook::insert(const string name, const string number) 
+1

不要な文字列のコピーを避けるためです。 – Kane

答えて

2

void PhoneBook::insert(const string name, const string number)

すべてのデータのコピーを持つ新しい文字列を構築しています。これは重い操作です。

void PhoneBook::insert(const string& name, const string& number)

ここでは、非常に軽い操作であるプラットフォームに基づいて、通常4または8バイトであり、その大きさ(列のアドレス)、文字列への参照を渡します。

また、リファレンスを渡すと、オブジェクトとやりとりすることができます。これは、関数に渡されます。

親指 - 変数が8バイトより大きく、オブジェクトの明示的なコピーを必要としない場合、常にconst参照を渡します。

+0

ありがとう、私は与えられた重複したリンクで作業します。 – Yazgan

+0

これは、外部オブジェクトの参照と保持する新しいコピーの作成との間の基本的な意味の違いには対処できません。参照パラメータですべての熱狂的であるように見える最適化の懸念は、後になって下がっていきます。 – Quentin

関連する問題