在下面的函数声明中,
const char* c_str ( ) const;
第二个const做了什么?
答案 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
。