“const”在函数定义的末尾是什么意思(在上下文中)?

时间:2011-03-04 23:55:36

标签: c++

  

可能重复:
  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) {

}

5 个答案:

答案 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