我非常熟悉C/C++标准函数声明.我最近看到过这样的事情:
int myfunction(char parameter) const
以上只是一个假设的例子,我甚至不知道它是否有意义.我指的是参数之后的部分.常数.这是什么?
一个更真实的例子:
wxGridCellCoordsArray GetSelectedCells() const
这可以找到here
那么文本const到底在做什么呢?
解决方法
const关键字在函数之后显示,保证函数调用者不会更改任何成员数据变量.
比如给这个班级,
// In header class Node { public: Node(); void changeValue() const; ~Node(); private: int value; };
//在.cpp
void Node::changeValue() const { this->value = 3; // This will error out because it is modifying member variables }
这条规则有一个例外.如果声明成员数据变量是可变的,则无论函数是否声明为const,都可以更改它.使用mutable是因为对象被声明为常量的罕见情况,但实际上有成员数据变量需要更改选项.其使用的一个潜在示例是缓存您可能不想重复原始计算的值.这通常很少见……但要注意它是件好事.
比如给这个班级,
// In header class Node { public: Node(); void changeValue() const; ~Node(); private: mutable int value; };
//在.cpp
void Node::changeValue() const { this->value = 3; // This will not error out because value is mutable }