gpt4 book ai didi

c++ - 通过常量引用返回在堆上创建的对象

转载 作者:行者123 更新时间:2023-11-28 00:15:39 31 4
gpt4 key购买 nike

我在返回对在堆上创建的对象的常量引用时遇到问题。

在我的标题中,我定义了两个像这样的堆对象(使用 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,则该函数可用于获取可修改的引用,否则为只读引用。

关于c++ - 通过常量引用返回在堆上创建的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30506651/

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