函数原型中的const参数
这个问题在这里已经有了答案:
这是一个const
方法,这意味着你可以调用它const
对象,也不会改变非mutable
成员,也不会调用其他非const
方法。
struct X
{
void foo();
int x;
void goo() const;
};
void X::goo() const
{
x = 3; //illegal
foo(); //illegal
}
//...
const X x;
x.foo(); //illegal
x.goo(); //OKAY
基本上,这意味着该方法不会修改该类的实例的状态。 这意味着它也不会调用会改变类实例状态的其他成员。
好:
class Foo
{
int m_foo;
int GetFoo() const
{
return m_foo;
}
}
编译错误:
class Foo
{
int m_foo;
int GetFoo() const
{
m_foo += 1;
return m_foo;
}
}
有更深入的考虑因素,如通过参考传递时的性能优势 - 如果您想深入研究,搜索的术语是“常量正确性”。
这一行中的const
意味着它是一个常量函数。 这意味着它不能修改它里面的对象。
因此,如果你声明了一个成员函数const
,你可以告诉编译器该函数可以被调用给一个const对象。 没有明确声明为const
成员函数被视为将修改对象中的数据成员的成员函数,编译器将不允许您为const
对象调用它。