在类方法中应使用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