C++ 当函数更改成员变量时,给定函数中的const有什么用途?
当函数更改成员变量时,const有什么用???不能在C++ 当函数更改成员变量时,给定函数中的const有什么用途?,c++,constants,C++,Constants,当函数更改成员变量时,const有什么用???不能在const对象(或指向const对象的ref或指针)上调用未标记const的方法 但是,这意味着从标记为const的方法中访问的所有数据成员也是const,因此您无法更改它们(不耍花招) 这就是为什么您的setx不会编译--x在这些方法中是常量 当成员变量被 功能 正如@songyuanyao正确提到的,导致编译错误 然而,这是一种惯例。您仍然可以通过上的const_cast或通过标记成员可变来修改成员 如前所述,逻辑常数和物理常数之间存在差异
const
对象(或指向const
对象的ref或指针)上调用未标记const
的方法
但是,这意味着从标记为const
的方法中访问的所有数据成员也是const
,因此您无法更改它们(不耍花招)
这就是为什么您的setx
不会编译--x
在这些方法中是常量
当成员变量被
功能
正如@songyuanyao正确提到的,导致编译错误
然而,这是一种惯例。您仍然可以通过上的const_cast
或通过标记成员可变来修改成员
如前所述,逻辑常数和物理常数之间存在差异
为什么我们仍然可以修改const
方法中的非const
静态
成员
类的非静态
方法将this
作为参数<方法上的code>const
限定符使此
保持不变(并在违反约定时触发编译错误)
静态
成员与此
没有任何关系:它是类中每个对象的唯一成员。这就是为什么一个方法的常量(即this
的常量)对类的静态成员没有影响。“const…”的用法是什么导致编译器错误?看起来您错误地将setters设置为常量,而getter设置为非常量。应该是相反的。这些东西都应该在类定义中,而不是在类定义之后。x
是静态的,所以它不受setx
@Caleth fixed上的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; }
} ;
StatDemo sd;
StatDemo const & sdr = sd;
sdr.get(x); // error because getx isn't marked const