C++ 为什么要使用常量成员函数?

C++ 为什么要使用常量成员函数?,c++,function,class,constants,C++,Function,Class,Constants,我试图理解类getter和setter函数 我的问题是: 如果我设计的函数只从其类中获取状态(“getter”函数),为什么要将其标记为“const member function”? 我的意思是,如果我的函数设计为不改变其类的任何属性,为什么要使用const成员函数? 我不明白,请:( 例如: int GetValue() {return a_private_variable;} 及 真正的区别是什么?类的常量实例只能调用常量函数 拥有一个类的const实例有助于使程序更加稳定,因为这样您就

我试图理解类getter和setter函数

我的问题是: 如果我设计的函数只从其类中获取状态(“getter”函数),为什么要将其标记为“const member function”? 我的意思是,如果我的函数设计为不改变其类的任何属性,为什么要使用const成员函数? 我不明白,请:(

例如:

int GetValue() {return a_private_variable;}


真正的区别是什么?

类的常量实例只能调用常量函数

拥有一个类的const实例有助于使程序更加稳定,因为这样您就不能意外地修改实例


在您的例子中,函数的作用完全相同,但不一定非得如此。

当您将成员函数声明为
const
时,如

int GetValue() const;
然后告诉编译器它不会修改对象中的任何内容

这也意味着您可以在常量对象上调用成员函数。如果您没有
const
修饰符,则无法在定义为
const
的对象上调用它。您仍然可以在非常量对象上调用
const
成员函数

还要注意,
const
修饰符是成员函数签名的一部分,这意味着您可以使用非const函数重载它

int GetValue() const;
int GetValue();

同班。

<代码> const 可以在C++中的三个不同地方出现。

例1:

const Object obj1;

  • obj1是一个
    const
    对象。这意味着您不能更改此对象上的任何内容。此对象只能调用
    const
    成员函数,如
int GetValue()常量{返回一个私有变量;}

例2:

int myMethod()const{//do something}

  • 这是一个
    const
    方法。如果在类中声明,则它将是
    const
    成员函数。这些是
    const
    变量可以调用的方法类型
例3:

int-myMethod(const-Object&x){//用x做点什么}

  • 这是一个采用
    const
    参数的方法。这意味着
    myMethod
    中的逻辑不允许更改与
    x
    有关的任何内容。还要注意的是,参数是通过引用传递的,而不是通过副本传递的。我喜欢将其视为只读类型的方法

当你在开发别人使用的软件时,最好不要让他们破坏他们不知道不应该破坏的东西。在这种情况下,你可以将变量、方法和参数约束为
const
,以确保合同得到遵守。我试图总结我在大学里学到的主要思想,但在C++中,在代码> > const <代码>下有很多资源。如果您想知道更多,请查看此。我可能还记得一些错误,因为我在C/C++领域中已经有一段时间了。< /p>声明为 const <代码>的成员函数可以被调用在非常量对象上。谢谢,我错了。圆的。你的答案比我的好得多。你的答案很详细,谢谢^_^
int GetValue() const;
int GetValue();