在构造函数C++中初始化引用

ale*_*ale 27 c++ constructor

我认为这不是一个重复的问题.有类似的,但他们没有帮助我解决我的问题.

根据这个,下面是在C++中有效:

class c {
public:
   int& i;
};
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,我收到以下错误:

error: uninitialized reference member 'c::i'
Run Code Online (Sandbox Code Playgroud)

如何i=0在构造上成功初始化?

非常感谢.

Ker*_* SB 34

没有"空参考"这样的东西.您必须在对象初始化时提供引用.将它放在构造函数的基本初始化列表中:

class c
{
public:
  c(int & a) : i(a) { }
  int & i;
};
Run Code Online (Sandbox Code Playgroud)

另一种选择是i(*new int),但那太可怕了.

编辑:为了回答你的问题,你可能只想i成为一个成员对象,而不是一个引用,所以只需说int i;,然后将构造函数写为c() : i(0) {}或作为c(int a = 0) : i(a) { }.

  • @Constantinius:即使你记得清理它仍然是相当可怕的......只要考虑作业,副本,异常安全等等...... (2认同)

ful*_*ton 5

除了甜蜜的语法之外,引用的一个关键特征是您非常确定它始终指向一个值(无 NULL 值)。

在设计 API 时,它会强制用户不要向您发送 NULL。使用 API 时,无需阅读文档,您就知道 NULL 不是此处的选项。