2016-12-01 99 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个字节大,你不要求目标明确的副本。

+0

谢谢,我将处理给定的重复链接。 – Yazgan

+0

这不能解决引用外部对象和创建新副本的基本语义差异。优化问题似乎与参考参数有关,随后会出现。 – Quentin