![](/img/trans.png)
[英]C++ - returning a const vector of const vectors of const objects
[英]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.