当函数更改成员变量时,给定函数中const的用途是什么?

时间:2016-09-19 02:39:58

标签: c++ const

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的用途是什么?

2 个答案:

答案 0 :(得分:0)

无法在const对象(或ref或指向const对象的指针)上调用

未标记为const的方法。

StatDemo sd;
StatDemo const & sdr = sd;
sdr.get(x); // error because getx isn't marked const

但是,这意味着从标记为const的方法中访问的所有数据成员也是const,因此您无法更改它们(不使用技巧)。

这就是为什么您的setxsety无法编译 - xy在这些方法中是常量。

答案 1 :(得分:0)

  

当成员变量由更改时,const的用途是什么?   功能?

正如@songyuanyao正确提到的那样,会导致编译错误。

但是,这是一个约定。您仍然可以通过const_cast上的this或通过标记成员mutable来修改成员。

here所述,逻辑和物理一致性之间存在差异。

  

为什么我们仍然可以在non-const方法中修改static const个成员?

类的non-static方法具有this作为参数。方法上的const限定符使this保持不变(并在违反约定时触发编译错误)。

static成员与this毫无关系:它是类中每个对象的唯一成员。这就是为什么方法的常数(即this的常数)对类的static成员没有影响的原因。