什么时候使用 const string& 与 const string 比较好

When is it better to use const string& versus const string

我知道最好将 const String 引用作为参数传递给方法。

但是,如果我只是需要在代码中使用一个String作为常量,还是引用它比较好?获取对它的引用不只是开销吗? 我可以在我们的代码库中的许多地方看到这一点,我试图理解为什么这是可取的。

string bar = "test";
const string& data = "FOO_" + bar; //why is this better than const string data?
insert(data)

函数插入引用,

void insert(const string& data)

同样的问题将适用于以相同方式使用的任何 const 对象。

谢谢!

C++ 中的引用应被视为现有变量的别名。当您有一个变量已经存在并且您希望通过不同的别名(名称)访问时,您可以使用引用。

当您想引用现有变量(内存位置)作为函数的参数时,这在函数调用中最常见。如果您不想将副本传递给函数,而是想将一个已经存在的变量传递给使用引用的新名称下的函数。

同样,当您希望 class 引用一个已经存在的变量时,您可以使用引用。

引用 'should' 始终引用现有变量。

const string data = "FOO_" + bar;

创建一个临时对象并将其作为参数传递给 data 的复制构造函数。创建两个字符串实例,进行复制并销毁一个实例。

const string& data = "FOO_" + bar;

创建一个临时的但将她分配给名称 data,因此她不再是临时的。创建了一个实例,而不是更多。