从函数返回const引用

Returning const reference from function

本文关键字:引用 const 返回 函数      更新时间:2023-10-16

我希望我的函数返回一个对象数组。但是我想对返回的引用进行一些限制,以便返回的值/引用不会被调用者修改。

class A
{
    B **arrB;
    public :
        A() 
        {
            initialize arrB 
        }
        B** getB()
        {
           return arrB;
        }
}
 之前

在上面的代码中,getB()函数返回的数组不应该被修改。有人能建议最好的方法吗?const能帮上忙吗?

应该这样做:

const B * const * getB() const { return arrB; }

编辑:添加const,因为成员函数不能修改内容。

是的,它会有帮助。但是,您将得到一个关于从B **const B **的非法转换的错误,但这就是const_cast:

的原因。
const B** getB() const
{
    return const_cast<const B**>(arrB);
}

注意,我在函数声明之后添加了一个额外的const限定符。这告诉编译器该函数不会修改类中的任何内容。

嗯,我看到的可能的方法是返回从私有数组复制的新数组(包含原始对象实例的副本)。如果你想确保类的私有成员没有被改变,那么你就不需要关心获取arrB指针副本的代码将对它做什么。但当然也有缺点,比如更多的内存使用,消费者必须删除获得的数组。

const没有真正的帮助。当你试图修改数组时,编译器可能会提出一些警告/错误,但你总是可以转换为非const指针并修改它。const对类的用户来说更像是一个提示:我给你的指针是只读的;修改它,后果自负!

相关文章: