C++ 引用构造函数语法

标签 c++

考虑以下短程序。

#include <string>

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

第 2 行和第 3 行是否等效?

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

我尝试了各种搜索,例如“构造函数引用”和“引用复制构造函数”,但我似乎无法在第 2 行找到文档。

最佳答案

是的,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

关于C++ 引用构造函数语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23379415/

相关文章:

c++ - 使用 clang/LLVM 通过 LDFLAGS 链接 .dylib

c++ - 类面向对象错误中的常量指针

c++ - Cin.Ignore() 不工作

c++ - 忽略 "cin"并使用 "kbhit"转到另一个函数

c++ - 常量声明 - 语言差异?

c++ - 在两个不同的头文件中声明相同的命名空间,然后将它们包含在一个 cpp 中

c++ - 如果类包含用户声明的析构函数,那么复制构造函数有什么用?

c++ - 规范化包含编译时*或*运行时值的对象构造

c++ - RInside 和 Rcpp 的区别

C++ 字符串超过几个 NUL 字节