const
帮助您隔离背后“改变事物”的代码。因此,在一个类中,您会将所有不会更改对象状态的方法标记为const
。这意味着const
该类的实例将不再能够调用任何非const
方法。这样,可以避免意外调用可以更改对象的功能。
同样,const
它也是重载机制的一部分,因此您可以使用两种具有相同签名的方法,但一种使用带签名的方法const
,一种没有签名。一个带有const
的称为const
引用,另一个称为非const
引用。
例:
#include <iostream>
class HelloWorld {
bool hw_called;
public:
HelloWorld() : hw_called(false) {}
void hw() const {
std::cout << "Hello, world! (const)\n";
// hw_called = true; <-- not allowed
}
void hw() {
std::cout << "Hello, world! (non-const)\n";
hw_called = true;
}
};
int
main()
{
HelloWorld hw;
HelloWorld* phw1(&hw);
HelloWorld const* phw2(&hw);
hw.hw(); // calls non-const version
phw1->hw(); // calls non-const version
phw2->hw(); // calls const version
return 0;
}