【发布时间】:2014-02-13 17:32:12
【问题描述】:
我正在尝试理解一段 C++ 代码,但我已经到了不明白以下含义的地步:
以下定义在函数原型文件中,即 (.h)
让我困惑的是 const 参数:
ofMesh getImageMesh() const;
我的意思是,函数/方法返回一个类 ofMesh,getImageMesh() 没有参数并且 然后 const 跟随。为什么这样使用“const”?
【问题讨论】:
我正在尝试理解一段 C++ 代码,但我已经到了不明白以下含义的地步:
以下定义在函数原型文件中,即 (.h)
让我困惑的是 const 参数:
ofMesh getImageMesh() const;
我的意思是,函数/方法返回一个类 ofMesh,getImageMesh() 没有参数并且 然后 const 跟随。为什么这样使用“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
【讨论】:
const 所带来的程序稳定性收益不容小觑。
基本上,这意味着该方法不会修改该类实例的状态。这意味着它也不会调用会改变类实例状态的其他成员。
好的:
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 对象调用它。
【讨论】: