const函数,但我可以"修改"类

lin*_*fex 1 c++ const

我在一个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.我的推理失败了?

Ami*_*ory 7

声明为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函数的意思是它无法修改它.