在類方法中應使用const
關鍵字來指示調用對象未被此方法修改。但是後者的確切語義是什麼?我能想到的三個選項:A類方法應該是const當且僅當哪些方法應該是const?
- (最弱)不修改對象的商店的比特和字節
- (強)不修改對象(如在1),並且也沒有其由對象所擁有的被引用對象
- (最強)它不改變由它引用的對象,並且還沒有任何對象(無論是擁有或不)
什麼是「正確」方式?編程界有沒有共同的想法?
例如,標準庫的容器const語義顯然至少滿足2個。另一方面,奇怪的是,std :: unique_ptr的* -operator甚至不滿足2:它是const,但是返回一個非const引用指向的對象,雖然對象擁有的是std :: unique_ptr對象根據定義。
又如:
class X
{
private:
int& intref;
public:
X(int& intref): intref(intref) {};
void modifyRef(int& another) const
{
this->intref = another;
}
};
繼2,關於方法的常量是確定的,因爲INTREF引用一些東西,不是由對象所擁有。在3之後,const應該被刪除。
「的const關鍵字應該在類的方法被用來指示該方法不會修改調用對象。「 - ***錯誤***。它表示***被調用的***對象沒有被這個方法修改。 –
我會再向下一級,0(邏輯常量)你在哪裏不透明地修改對象狀態。 – gjha
@gjha這不是一個級別,而是一個側面。 – Deduplicator