簡體   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