为什么使用const成员函数?

nop*_*nto 5 c++ const class function

我正在努力理解课堂上的getter和setter功能......

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

例如:

int GetValue() {return a_private_variable;}
Run Code Online (Sandbox Code Playgroud)

int GetValue() const {return a_private_variable;}
Run Code Online (Sandbox Code Playgroud)

真正的区别是什么?

Som*_*ude 18

当你声明一个成员函数时const,就像在

int GetValue() const;
Run Code Online (Sandbox Code Playgroud)

然后你告诉编译器它不会修改对象中的任何东西.

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

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

int GetValue() const;
int GetValue();
Run Code Online (Sandbox Code Playgroud)

在同一个班.


Noa*_*ron 13

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

示例 1:

const Object obj1;

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

int GetValue() const {return a_private_variable;}

示例 2:

int myMethod() const {//do something}

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

示例 3:

int myMethod(const Object &x) {//do something with x}

  • 这是一个接受const参数的方法。这意味着里面的逻辑myMethod不允许改变任何与x. 还要注意参数是通过引用而不是通过复制传递的。我喜欢将其视为只读类型的方法。

当您正在开发将被其他人使用的软件时;最好不要让他们破坏他们不知道不应该破坏的东西。在这种情况下,您可以约束变量、方法和参数const以保证合约得到维护。我试图总结我在大学学到的主要思想,但网上有很多const关于 C++ 的资源。如果您想了解更多信息,请查看此链接。也有可能我记错了一些东西,因为我已经有一段时间没有进入 C/C++ 领域了。