[英]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或刪除const : void modify() const
或void 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.