class StatDemo
{
} ;
private:
static int x;
int y;
public:
void setx(int a) const { x = a; }
void sety(int b) const { y = b; }
int getx() {return x; }
int gety() {return y; }
当函数改变成员变量时,const的用途是什么?
答案 0 :(得分:0)
const
对象(或ref或指向const
对象的指针)上调用未标记为const
的方法。
StatDemo sd;
StatDemo const & sdr = sd;
sdr.get(x); // error because getx isn't marked const
但是,这意味着从标记为const
的方法中访问的所有数据成员也是const
,因此您无法更改它们(不使用技巧)。
这就是为什么您的setx
和sety
无法编译 - x
和y
在这些方法中是常量。
答案 1 :(得分:0)
当成员变量由更改时,const的用途是什么? 功能?
正如@songyuanyao正确提到的那样,会导致编译错误。
但是,这是一个约定。您仍然可以通过const_cast
上的this
或通过标记成员mutable
来修改成员。
如here所述,逻辑和物理一致性之间存在差异。
为什么我们仍然可以在
non-const
方法中修改static
const
个成员?
类的non-static
方法具有this
作为参数。方法上的const
限定符使this
保持不变(并在违反约定时触发编译错误)。
static
成员与this
毫无关系:它是类中每个对象的唯一成员。这就是为什么方法的常数(即this
的常数)对类的static
成员没有影响的原因。