gpt4 book ai didi

c++ - 为什么引用类型成员的默认初始化会导致编译器警告?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:06:04 27 4
gpt4 key购买 nike

我有以下代码:

class A {
public:
A() { }
};

class B {
private:
const A &a;

public:
B() : a() { }
B(const A &ina) : a(ina) { }
};

编译结果如下:

ab.cpp: In constructor 'B::B()':

ab.cpp:11: warning: default-initialization of 'const A& B::a', which has reference type

为什么这会导致警告,我该如何解决?

最佳答案

C++ 语言中的引用可以被认为是其他对象的“替代名称”。一个名字总是指一个对象,没有那个对象它就不能存在,即一个引用不能“指任何东西”。这意味着引用必须在引用创建时立即绑定(bind)到目标对象,并且只要该引用存在就保持绑定(bind)到该对象。该语言专门设计用于尽可能多地执行该规则。对于非聚合类类型中的引用成员,必须在构造函数初始化列表中显式初始化此类成员。

严格来说,要求对引用进行默认初始化的程序是病式的。在日常命名中,它应该是“错误”,而不是“警告”。因此,这里真正的“原因”是您的编译器仅发出警告的原因(尽管形式上任何诊断消息都足以报告格式错误的代码)。

关于c++ - 为什么引用类型成员的默认初始化会导致编译器警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18367698/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com