C++参考初始化
回答
此规则仍然适用,引用为成员变量,您必须在构造函数的启动列表中进行初始化。例如:
class X {
public:
X(int& ri) : mri(ri) {}
// X() {} // ERROR! no explicit initialization of mri
int& mri;
};
int main() {
int i;
X x(i);
}
没有初始化它,你会得到编译器错误。
(我决定从意见总结等良好的澄清,使这个答案更加有用)
根据标准8.5.3/3(重点煤矿):
的初始化可以省略仅供参考声明(8.3.5)中的参考,在 函数返回类型声明中,在其类定义中的类成员声明中(9.2),以及明确使用 extern说明符。
所以下面的代码只是定义struct X
其中mri
变量只声明。如果你创建(定义)X类型的对象,编译器不会显示任何错误。当你写:
int main() {
X x; // error, `x.r` is not bound to any object
}
编译器会抱怨,这是因为你已经定义x
,这是你还必须绑定x.r一些对象。你可以做的唯一的地方是在构造函数初始化列表中。
您可能还会注意到,当您将引用添加为非静态数据成员时,编译器会将默认构造函数标记为已删除。
什么是反对???这个答案是正确的! (我正准备发布差不多相同的答案)。 –
让OP先澄清一下,然后再拍摄到黑暗之前。正确的反应是近距离投票(也许可以发表评论)。请不要在这里提出脱离主题的问题。 –
OP-s混淆可能来自'int & mri;'看起来像非初始化参考的事实,但我只是在猜测。 – marcinj
- 1. 初始化参考C++
- 2. C:初始化参考变量双
- 3. 避免拷贝初始化时参考
- 4. 问题与传递展开参考目标C初始化
- 5. 里面的c + +线程,初始化参考
- 6. C++初始化指针/参考/复制细微差别
- 7. 初始化,初始化与参数和便利初始化
- 8. C++初始化
- 9. c#初始化
- 10. C++ - 初始化与骨料初始化
- 11. C#类初始化不同的参数?
- 12. C++荚初始化
- 13. VECTOR初始化C++
- 14. 初始化在C++
- 15. C++值初始化
- 16. C++结构体初始值初始化
- 17. 模板参数初始化
- 18. 如何初始化参数
- 19. 使用参数初始化
- 20. 初始化参数不同
- 21. BFGS初始猜测的参考号
- 22. 如何解决此循环参考初始化错误?
- 23. 初始化参考成员本身合法吗?
- 24. 如何初始化参考矢量对象
- 25. 参考在角度工厂中初始化变量
- 26. 如何在课堂上初始化参考?
- 27. 初始化参考 - 警告C4355:“这个”:在基地成员初始化列表中使用
- 28. 如何初始化在C++
- 29. C初始化矩阵
- 30. C#继承类初始化
请显示一些代码。 –
因为它们是由成员初始化列表初始化的。 – songyuanyao
_“但我发现,当它是一个类成员时,引用被声明而不被初始化。这是一个特殊情况?”_证据? –