繁体   English   中英

从函数返回const引用

[英]Returning const reference from function

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

例如

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限定符。 这告诉编译器该函数不会修改类中的任何内容。

const并没有真正帮助。 当您尝试修改数组时,编译器可能会引发一些警告/错误,但您始终可以转换为非const指针并对其进行修改。 const更像是对类的用户的一个提示:我给你的指针是只读的; 修改它你的危险!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM