C ++参考构造函数语法

时间:2014-04-30 03:56:27

标签: c++

考虑以下简短程序。

#include <string>

int main(){
    std::string hello("HelloWorld");
    std::string& helloRef(hello);        // "line 2"
    std::string& hello3 = hello;         // "line 3"
}

第2行和第3行是否相同?

  • 如果有,有人可以提供关于第2行语法的文档吗?
  • 如果没有,有人可以解释一下这个区别吗?

我尝试了各种搜索,例如&#34;构造函数参考&#34;和#34;参考拷贝构造函数&#34;但我似乎无法在第2行找到文件。

2 个答案:

答案 0 :(得分:3)

是的,helloRef和hello3都是对hello字符串对象的引用。 这称为参考初始化。通常你会在这里使用=运算符。您可以在类的构造函数初始化列表中使用第二行的表单,如下所示:

class c
{
public:
  c()
    : hello("HelloWorld"),
      helloRef(hello)
  {
    std::string& hello3 = hello;
  }

private:
  std::string hello;
  std::string& helloRef;
};

更多信息:http://en.cppreference.com/w/cpp/language/reference_initialization

答案 1 :(得分:1)

#include <string>

int main(){
std::string hello("HelloWorld");
std::string& helloRef(hello);
std::string& hello3 = hello;
}

在上面的代码中,

第1行,在预定义的字符串类中调用单个参数构造函数,并通过初始化字符串“HelloWorld”来创建对象hello。

通过第2行,在预定义的字符串类中调用复制构造函数,并通过初始化相同的对象字符串hello来创建对象helloRef。因为“&amp;”使用的符号,helloRef将作为hello对象的引用对象。

通过第3行,它是为现有变量创建引用变量的语法。因此,通过此声明,将为hello对象创建hello3引用对象。这里因为“=”运算符,在字符串类中调用预定义的方法,即=运算符重载函数,并将字符串初始化为hello3对象。

这里引用变量或引用对象意味着

只需为同一内存位置创建别名即可。