为什么使用const成员函数?

时间:2016-10-19 17:29:41

标签: c++ function class const

我正在尝试理解课堂上的getter和setter函数......

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

例如:

req.body.comments

int GetValue() {return a_private_variable;}

真正的区别是什么?

3 个答案:

答案 0 :(得分:17)

当您将成员函数声明为const时,就像在

中一样
int GetValue() const;

然后你告诉编译器它不会修改对象中的任何内容。

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

另请注意,const修饰符是成员函数签名的一部分,这意味着您可以使用非const函数重载它。那就是你可以拥有

int GetValue() const;
int GetValue();

在同一个班级。

答案 1 :(得分:3)

const可以在C ++中的三个不同位置出现。

示例1:

const Object obj1;

  • obj1是const个对象。这意味着您无法更改此对象的任何内容。此对象只能调用{/ 1}}成员函数,如
  

int GetValue()const {return a_private_variable;}

示例2:

const

  • 这是int myMethod() const {//do something}方法。如果在类中声明它,它将是const成员函数。这些是const变量可以调用的方法类型。

示例3:

const

  • 这是一个采用int myMethod(const Object &x) {//do something with x}参数的方法。这意味着const内的逻辑不允许更改与myMethod有关的任何内容。另请注意,参数是通过引用而不是通过副本传递的。我想将此视为一种只读类型的方法。

当您开发将由他人使用的软件时;不要让他们打破他们不知道他们不应该打破的事情是个好主意。在这种情况下,您可以将变量,方法和参数约束为x,以保证合同得到维护。我试着总结一下我在大学里学到的主要想法,但是在C ++中const周围有很多资源。如果您想了解更多信息,请查看此link。我也有可能错误地记住了一些事情,因为我有一段时间没有进入C / C ++领域。

答案 2 :(得分:0)

类的const实例只能调用const函数。

拥有一个类的const实例对于使程序更稳定非常有用,因为那时你无法意外修改实例。

在你的情况下,功能完全相同,但它不一定是这样。