【问题标题】:When is it better to use const string& versus const string什么时候使用 const string& 与 const string 比较好
【发布时间】:2015-07-24 21:46:32
【问题描述】:

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

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

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

函数insert接受一个引用,

void insert(const string& data)

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

谢谢!

【问题讨论】:

  • 也许我疯了,但我认为const string & data = "FOO_" + bar; 不起作用。
  • @QuestionC 为什么不起作用?
  • 一个 const 引用很少有任何开销。编译器会知道优化它。

标签: c++ string constants


【解决方案1】:
const string data = "FOO_" + bar;

创建一个临时的并将她作为参数传递给data 的复制ctor on construction。创建两个字符串实例,复制并销毁一个实例。

const string& data = "FOO_" + bar;

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

【讨论】:

  • 第一种情况可能符合RVO,所以operator+的结果可以直接构造成data,绕过副本。
【解决方案2】:

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

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

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

引用“应该”始终引用现有变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-29
    • 2016-06-25
    • 1970-01-01
    • 2021-01-11
    • 2013-11-06
    • 1970-01-01
    • 2020-03-24
    相关资源
    最近更新 更多