簡體   English   中英

返回&const或* const? (C ++)

[英]returning &const or *const? (c++)

我有自己的班級“SomeObject”,有幾個成員。

現在,我有另一個類“WorkingClass”包含此對象作為私有成員。

我的問題是:我想為“SomeObject”創建一個Getter,但我不希望任何人修改它。

哪種方式更好,1還是2?

class WorkingClass
{
private:
    SomeObject sObj;

public:
    //... 1)
    const SomeObject &const GetSomeObject()
    {
        return mousePosition;
    }

    //... 2)
    const SomeObject *const GetSomeObject()
    {
        return &mouseMovement;
    }
}

我知道你總是可以拋棄const,但是,我只是想讓我的代碼干凈並且安全無虞

編輯:

那我還有一個問題。 當我有一個智能指針成員並在課堂上大量使用它,然后突然想要有人訪問讀取一些值,但沒有更多,這將是一個很好的解決方案還是再次冗長?

class X
{
private:
    boost::shared_ptr<SomeObject> sob

public:
    const const & GetSomeObject()
    {
        return *sob.get();
    }
}

以及如何返回“const boost :: shared_ptr <...> GetX()”? 它可能不是真正的必要,但仍然沒有用,因為在這種情況下編譯器會禁止GetX()。reset(..),並且沒有const boost :: ...聲明這將是允許的無用操作。 或者我錯了?

兩者都不好:

  • const SomeObject &const不正確。 您無法限定參考資格。 (當然,您可以限定參照類型。)

  • const SomeObject *const是不必要的冗長。 函數調用表達式o.GetSomeObject()是一個rvalue表達式,只有class-type rvalues可以是const限定的。 你也可以說const SomeObject* const SomeObject *const實際上可能導致模板實例化的問題,盡管這種問題很少見。)

至於您是選擇通過指針還是通過引用返回,這取決於您使用返回值的方式。 兩者都可以在不同的情況下有意義。 無論如何,您希望返回一個引用或指向const對象的指針,而不是const引用或const指針:

const SomeObject& GetSomeObject() { ... }
const SomeObject* GetSomeObject() { ... }

通常,返回參考是優選的。

寫作& const毫無意義的 參考文獻總是不變的。 在那里省略const關鍵字。

如果要返回常量非null對象,則使用引用會更好。 如果要返回對象或空指針,請改用指針。

另請參閱何時應使用引用,何時應使用指針?

盡可能使用引用,並在必要時使用指針。

只要您不需要“重新安裝”,引用通常優先於指針。 這通常意味着引用在類的公共接口中最有用。 引用通常出現在對象的皮膚上,而指針則出現在內部。

上面的例外是函數的參數或返回值需要“sentinel”引用 - 一個不引用對象的引用。 這通常最好通過返回/獲取指針,並給出NULL指針這一特殊意義(引用應始終別名對象,而不是取消引用的NULL指針)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM