返回通过常量引用在堆上创建的 object
Returning a object created on heap by constant reference
我在返回对在堆上创建的 object 的常量引用时遇到问题。
在我的 header 中,我定义了两个 heap-objects 像这样(使用 C++11 语法)
private:
Type1 *type1 = nullptr;
Type2 *type2 = nullptr;
和两个 getter 这样的方法
public:
Type1 &GetType1() const;
Type2 &GetType2() const;
现在在我的源文件中,我正尝试按如下方式进行
Type1 &GetType1() const
{
return this->type1;
}
Type2 &GetType2() const
{
return this->type2;
}
为了简单起见,我排除了对空值和错误处理的检查。
现在编译器抱怨
invalid initialization of reference of type ‘type1&’ from expression
of type ‘type* const’
当它显然不是常量指针而是常量引用时,为什么它向我显示我尝试从常量指针进行转换?
type1
是一个指针。您需要取消引用它才能访问对象本身。
你还应该决定你是想要一个 const
引用(在这种情况下函数可以而且应该是 const
)还是一个可变引用(在这种情况下它可以,但也许不应该,是 const
)。如果您愿意,可以同时提供两个重载:
Type1 const &GetType1() const {return *type1;}
Type1 &GetType1() {return *type1;}
如果对象不是 const
,则该函数可用于获取可修改的引用,否则为只读引用。
我在返回对在堆上创建的 object 的常量引用时遇到问题。
在我的 header 中,我定义了两个 heap-objects 像这样(使用 C++11 语法)
private:
Type1 *type1 = nullptr;
Type2 *type2 = nullptr;
和两个 getter 这样的方法
public:
Type1 &GetType1() const;
Type2 &GetType2() const;
现在在我的源文件中,我正尝试按如下方式进行
Type1 &GetType1() const
{
return this->type1;
}
Type2 &GetType2() const
{
return this->type2;
}
为了简单起见,我排除了对空值和错误处理的检查。
现在编译器抱怨
invalid initialization of reference of type ‘type1&’ from expression of type ‘type* const’
当它显然不是常量指针而是常量引用时,为什么它向我显示我尝试从常量指针进行转换?
type1
是一个指针。您需要取消引用它才能访问对象本身。
你还应该决定你是想要一个 const
引用(在这种情况下函数可以而且应该是 const
)还是一个可变引用(在这种情况下它可以,但也许不应该,是 const
)。如果您愿意,可以同时提供两个重载:
Type1 const &GetType1() const {return *type1;}
Type1 &GetType1() {return *type1;}
如果对象不是 const
,则该函数可用于获取可修改的引用,否则为只读引用。