在C ++中函数声明结束时的Const

时间:2012-04-28 22:59:43

标签: c++ function const

  

可能重复:
  Meaning of “const” last in a C++ method declaration?

在下面的函数声明中,

const char* c_str ( ) const;  

第二个const做了什么?

3 个答案:

答案 0 :(得分:17)

这意味着该方法是一个“const方法”对这种方法的调用不能改变任何实例的数据(mutable数据成员除外),并且只能调用其他const方法。

const方法可以在const或非const实例上调用,但非const方法只能在非const实例上调用。

struct Foo {
  void bar() const {}
  void boo() {}
};

Foo f0;
f0.bar(); // OK
fo.boo(); // OK

const Foo f1;
f1.bar(); // OK
f1.boo(); // Error!

答案 1 :(得分:1)

const只能标记到成员函数上。它保证不会更改任何对象的数据成员。

例如,以下是编译时错误:

struct MyClass
{ 
    int data; 
    int getAndIncrement() const;
};

int MyClass::getAndIncrement() const
{
    return data++; //data cannot be modified
}

答案 2 :(得分:1)

它是一个影响该方法的修饰符(它只适用于方法)。这意味着它只会访问,但不会修改对象的状态(即,不会更改任何属性)。

另一个微妙的变化是这个方法只能调用其他const方法(让它调用可能修改对象的方法是没有意义的)。有时,这意味着您需要某些方法的两个版本:const和非const