我在一个const关键词的类中有一个函数:
bool Machiavelli::IsStraight(std::vector<Card>& cards) const{}
Run Code Online (Sandbox Code Playgroud)
Machiavelli是一个类,里面有其他类,比如Card和Table:
class Table{
private:
std::map<int, std::vector<Card> > table;
....
};
Run Code Online (Sandbox Code Playgroud)
的vector在函数是一个矢量table.功能检查卡是否组装成直线.
现在,在函数中我改变了Card函数数据的值:
cards[i].SetIntValue(14);
Run Code Online (Sandbox Code Playgroud)
SetIntValue卡类中的函数在哪里.
读一些问题,我读到:
const在函数声明之后意味着不允许该函数更改任何类成员(除了那些标记为可变的类).
该函数不知道参数是在Machiavelli中,所以我可以改变一个类成员:table.我的推理失败了?
声明为const无法修改成员的方法,只要它尝试通过方法的隐式this指针修改它们.
考虑以下课程:
struct foo
{
void bar(int *i) const {
*i = 0;
_m = 0;
}
int j;
int _m;
};
Run Code Online (Sandbox Code Playgroud)
假设我们打电话
foo f;
f.bar(&f.j);
Run Code Online (Sandbox Code Playgroud)
然后行
*i = 0;
Run Code Online (Sandbox Code Playgroud)
很好.即使它实际上正在修改j,它也没有完成this.然而,
_m = 0;
Run Code Online (Sandbox Code Playgroud)
真正意思
this->_m = 0;
Run Code Online (Sandbox Code Playgroud)
所以它不会构建 - const函数的意思是它无法修改它.