如何在 c++ 中显式初始化引用
How do you explicitly initialize a reference in c++?
我有以下代码:
class SomeClass {};
class SomeOtherClass {
SomeClass& someObj;
public:
SomeOtherClass() {someObj = SomeClass();}
};
我在构造函数上收到一个错误,因为SomeOtherClass
说Constructor for 'SomeOtherClass' must explicitly initialize the reference member 'someObj'
.
所以我想我的问题很紧。如何初始化引用?
您正在尝试存储对立即被破坏的临时对象的引用,因此肯定会出错; 即使使用其他答案中描述的构造函数初始化列表。
引用应指向存储在其他位置的对象,就像指针一样。您确定在这种情况下甚至需要使用引用吗?
作为构造函数初始化列表的一部分:
SomeOtherClass() : someObj(SomeClass()) {}
更新:我真的应该警告说,这是你不应该逐字使用的东西,因为它会导致对即将死亡的临时对象实例的引用。
思路如上,但您必须传入一个生存期不短于您正在构建的SomeOtherClass
实例的对象。
您必须在构造函数的初始化列表中对其进行初始化,因为引用没有"默认"或"null"初始化:
class SomeOtherClass {
SomeClass& someObj;
public:
SomeOtherClass(SomeClass& sc) : someObj(sc) {}
};
编辑 正如在另一个答案中指出的那样,您应该注意将引用初始化为生存期与包含引用的对象相同或更长的对象。在上面的示例中,假设sc
比SomeOtherClass
实例的寿命更长。
相关文章:
- C++在构造函数处用表达式初始化引用
- 我可以从取消引用"new"的返回值初始化引用吗
- 通过用户定义的转换初始化引用
- 为什么我可以在初始化引用后重新绑定引用?
- TBB 编译器错误 -"my_task":必须初始化引用
- Visual Studio 2017 允许在构造函数中使用自身初始化引用成员.真的是合法的C++吗?
- 为构造函数初始化引用实例变量提供默认值
- 在构造过程中获取类成员的未初始化引用是否合法
- 在C++中初始化引用
- 在动态分配的结构中初始化引用
- 使用三元运算符初始化引用变量
- 如何在 c++ 中显式初始化引用
- 初始化引用时何时以及为何获得副本
- 初始化C++引用-为什么不使用运算符的地址
- 在C++中初始化引用和变量
- 在函数参数中分配/初始化引用
- 在 C++ 中初始化引用不起作用,但初始化 const 引用有效,为什么?
- 类组合构造函数 d 必须显式初始化引用成员
- 用对tuple的引用初始化引用的元组
- 为什么在c++中不能重新初始化引用