可能重复:
C++ 方法声明中最后一个“const”的含义?
在下面的函数声明中,
const char* c_str ( ) const;
第二个 const 做什么?
这意味着该方法是“const 方法” 对此类方法的调用不能更改任何实例的数据(mutable
数据成员除外),并且只能调用其他 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!
那const
只能标记到成员函数上。它保证不会更改任何对象的数据成员。
例如,由于它,以下将是编译时错误:
struct MyClass
{
int data;
int getAndIncrement() const;
};
int MyClass::getAndIncrement() const
{
return data++; //data cannot be modified
}
它是影响该方法的修饰符(它仅适用于方法)。这意味着它只会访问而不是修改对象的状态(即不会更改任何属性)。
另一个微妙的变化是这个方法只能调用其他const
方法(让它调用可能会修改对象的方法是没有意义的)。有时,这意味着您需要某些方法的两个版本:theconst
和 non- const
。