可能重复:
What is the meaning of a const at end of a member function?
如果我的课程定义如下:
type CLASS::FUNCTION(int, const char*) const
结束括号后的最后一个const是什么意思,以及如何将它应用于函数:
type CLASS::FUNCTION(int var1, const char* var2) {
}
答案 0 :(得分:29)
这意味着此函数不会修改对象的可观察状态。
在编译器术语中,它意味着您不能在const
对象(或const引用或const指针)上调用函数,除非该函数也被声明为const
。此外,声明为const
的方法不允许调用不是。
更新:,因为Aasmund完全正确添加,const
方法可以更改声明为mutable
的成员的值。
例如,有一个只读操作(例如int CalculateSomeValue() const
)来缓存其结果可能是有意义的,因为它的调用成本很高。在这种情况下,您需要有mutable
成员才能将缓存的结果写入。
我为遗漏道歉,我试图快速而且重点突出。 :)
答案 1 :(得分:2)
表示此函数不会修改任何成员变量,也不会调用任何非const成员函数。
如果你有一个指向类实例的const引用/指针,你将只能调用标记为const
的函数。
答案 2 :(得分:2)
const
意味着它不会修改它所调用的对象的状态(即this
)。
type CLASS::FUNCTION(int, const char*) const ; // Method Signature
type CLASS::FUNCTION(int var1, const char* var2) const {
}
您还需要在方法定义的末尾提及关键字const
。另请注意,只有成员函数可以在其末尾使用此非修饰符关键字const
。
答案 3 :(得分:1)
这意味着该方法是const,并且意味着该方法不会修改任何成员,因此可以在对象为const的设置中使用。
class Foo
{
public:
void foo(int a) { m = a; }
int bar() const { return m; }
private:
int m;
};
int baz(const Foo* ptr)
{
ptr->foo(10); // Not legal, Foo::foo is not const, and ptr is pointer to const.
return ptr->bar(); // Legal, Foo::bar is a const method, and does not modify anything.
}
答案 4 :(得分:0)
检查(即读取)而不是修改或写入对象的成员函数。以下链接对我有帮助。
http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.10