C++ 在C++;,什么时候我应该使一个方法为常量?

C++ 在C++;,什么时候我应该使一个方法为常量?,c++,constants,const-correctness,C++,Constants,Const Correctness,我的问题标题几乎可以解决所有问题。我最近发现,C++中的好编程实践是通过const引用传递许多值,并将类中的某些方法标记为常量方法。现在,我有一个库,我已经为自己写了一段时间了,它绝对没有常量正确性,所以我想开始一点一点地纠正它 在什么特定的场景中,我应该使方法保持常量?到目前为止,我知道“getter”方法通常应该设置为常量(因为其中的代码不应该修改任何类变量),但我是对所有被认为是getter的方法都这样做,还是只对特定的方法这样做?除了getter方法之外,还有哪些场景应该使方法保持不变

我的问题标题几乎可以解决所有问题。我最近发现,C++中的好编程实践是通过const引用传递许多值,并将类中的某些方法标记为常量方法。现在,我有一个库,我已经为自己写了一段时间了,它绝对没有常量正确性,所以我想开始一点一点地纠正它

在什么特定的场景中,我应该使方法保持常量?到目前为止,我知道“getter”方法通常应该设置为常量(因为其中的代码不应该修改任何类变量),但我是对所有被认为是getter的方法都这样做,还是只对特定的方法这样做?除了getter方法之外,还有哪些场景应该使方法保持不变

但是对于所有被认为是getter的方法,我是这样做的,还是只针对特定的方法


对于所有不修改不可变成员的方法,都应该这样做。它们不仅包括getter函数,还包括任何重载运算符函数,例如
operator==
operator=
运算符我应该在什么时候将方法设置为常量?

根据经验,只要对象的成员变量都未更改,就应该使方法保持常量

作为一个额外的指导原则,只有当您确定以后不会更改方法来更改成员变量时,才应该这样做


最后,如果您计划使一个方法影响成员变量,那么它应该是非常量的。否则,它应该是常量。

可能的重复应该问问自己什么时候不让方法
const
@PRIME不是重复的。该问题询问声明中的
const
的含义;OP询问何时应该使用它。当方法不对对象的状态进行任何(可观察的)更改时,通常使用
const
。这方面的简单测试是,如果您不更改任何内容,则将方法设置为常量。更好的经验法则是:标记所有内容
const
。然后看看是否真的需要非常量。通常的建议是“只要对象的状态没有改变”。如果某些状态保存在指针引用的内存块中,那么不仅要更改指针非常量,还要更改任何指向的变量。