c – 错误:类型’int int’的类型’int int’的引用的无效初始化

前端之家收集整理的这篇文章主要介绍了c – 错误:类型’int int’的类型’int int’的引用的无效初始化前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
关于以下模板功能,这是一个关于 this question代码的无关问题.
template <class T>
class Object : public Container {
public:
    T& object;

    Object(const T& obj) : object(obj) {}
};

这是调用构造函数代码

template <class T>
void Array::add_element(const T& element)
{
    vec.push_back(new Object<T>(element));
}

这段代码编译好,但是一旦在main中添加一行调用它:

Array array;
int i = 3;
array.add_element(i);

我得到一个编译器警告:错误:类型’int&’的引用的无效初始化从“const int”类型的表达式.

这是什么?我传递一个int,不应该自动变成一个const int&为了我?为什么编译器抱怨?

@R_403_323@

obj是一个常量引用.对象是一个非常量引用.

您不能从const引用初始化一个非const引用,因为这样做会打破首先有一个const引用的目的.

如果您希望Object的实例能够修改传递给其构造函数的int,那么构造函数应该使用非const引用.如果没有,那么数据成员应该是一个const引用.

在任何情况下,如果您使用新的分配具有引用的对象作为数据成员,您正在为自己储存麻烦.这是您的问题,以确保在我超出范围之前删除对象(或者无论如何,确保对象在超出范围后不使用其成员对象.

猜你在找的C&C++相关文章