簡體   English   中英

如果它只是“淺常量”而不是“深常量”,我應該聲明方法“常量”嗎?

[英]Should I declare method “const” if it is “shallow const” only, not “deep const”?

我有 class Foo ,它的成員bar_是指向某些數據的指針。 方法modify修改數據,但不修改指針本身。 因此我可以將該方法聲明為const

class Foo {
public:
    Foo() : bar_(new double) {};
    void modify() const {*bar_ += 1;};
private:
    double *bar_;
};

如果我將該方法聲明為const ,它將可以從其他 const 方法訪問,這更靈活。 同時,我可以刪除const作為對其他開發人員和用戶的提示,該方法間接修改數據(並假設數據歸類所有)。 所以我在這里有一個選擇: modify聲明為const或刪除constvoid modify() constvoid modify()

每種方法的優缺點是什么? 指導方針是怎么說的? 我應該怎么辦?

方法聲明后的const是意圖聲明 - const方法是冪等的; 它們不會修改 object 的 state 並且可以在const實例上調用。

如果 bar_ 指向的值是對象的bar_的一部分,則const方法不應修改它。

此外,即使是modify()這個名字聽起來也像是以某種方式修改了 object,因此不應聲明為const

但另一種方式也很重要 - 如果方法不修改 state,建議將其聲明為const (請參閱 C++ 核心指南Con.2 )。

暫無
暫無

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

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