首页 > 解决方案 > C++ 如何处理 const 标记的通过引用传递的类,这些类不是直接更改而是从另一端更改的?

问题描述

所以我现在正在制作一个国际象棋引擎,我有一个包含 Advantage 对象的 Game 类,我正在使用一种奇怪的方法来修改它们。它涉及 Game 类调用 Advantage 类的成员函数,它通过引用 Advantage 类来传递自身,并标记为 const。我现在遇到了一些我不习惯的错误,并决定我并不完全理解这是如何工作的。所以这里有一些伪代码,有人可以向我解释一下吗?

class Game ;
class Advantage {
private:
    bool whiteWinning_ = true;
public:
    void updateAdvantage(const Game& game);
}
class Game {
private:
    Advantage advantage_;
    int pawnLocation_ = 1; //obviously, this isn't a real chess game, but still...
public:
    void makeMove(int pawnSteps);
    bool getWinning() const;
}

void Advantage::updateAdvantage(const Game& game){
    //Game is marked const, but the same object is changed because advantage_ is being changed???
    whiteWinning_ = game.getWinning();
}

void Game::makeMove(int pawnSteps) {
    pawnLocation_ += pawnsteps;
    advantage_.updateAdvantage(*this);
}

bool Game::getWinning() const {
    return pawnLocation_ >= 8;
}

标签: c++

解决方案


传递给的游戏对象将Advantage::updateAdvantage您的论点转换为const. 但是,其中表示为的Advantage对象 不是 const,因此允许您写入.Advantage::updateAdvantagethiswhiteWinning_


推荐阅读