C++:将引用成员初始化为在初始化列表中创建的对象

标签 c++ reference initialization initializer-list

考虑以下代码:

class Foo {
    Foo() {}
};

class Bar {
    Foo &Foo_ref;
    Bar() : Foo_ref() {}
};

照原样执行,我得到错误:

tmp.cc: In constructor Bar::Bar():
tmp.cc:7: error: value-initialization of Foo& Bar::Foo_ref, which has reference type

我已经尝试了所有我能想到的变体。我究竟做错了什么?如何将引用成员初始化为新实例? 我现在使用 const 指针而不是引用作为解决方法,但我更愿意使用引用。

最佳答案

引用必须始终绑定(bind)到对象。您必须在构造函数中传递要引用的对象

Bar(Foo &foo) : Foo_ref(foo)
{
}

如果您不想(或不能)将 Foo 传递给 Bar 构造函数 - 您必须使用指针:

class Bar {
    Foo *Foo_ptr;
    Bar() : Foo_ptr(nullptr) {}
};

您可以将引用成员变量视为必须绑定(bind)在初始化列表中的指针

关于C++:将引用成员初始化为在初始化列表中创建的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11338472/

相关文章:

c++ - 自主实时人脸识别系统

c++ - 在 Centos 中安装 QT - 安装 OpenBR 时的 CMake 警告

c# - 从 xaml 到 .cs 类文件中的公共(public)类的引用

.net - 我在理论上了解线程,但在 .net 中不了解实践

c# - 带验证的对象初始化

C++:编译器能否优化按值传递?

c++ - Qt : KeyPress event

c++ - MISRA 发出的文字零而不是空指针常量警告

c - VLA 和通过 malloc 进行动态内存分配有什么区别?

c++ - 代码 :Blocks Mingw Compiler Error: Variable-Sized Object May Not Be Initialized