c++ - 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;
}
解决方案
传递给的游戏对象将Advantage::updateAdvantage
您的论点转换为const
. 但是,其中表示为的Advantage
对象 不是 const,因此允许您写入.Advantage::updateAdvantage
this
whiteWinning_
推荐阅读
- typescript - 如何从 Typescript 中的窗口对象函数获取参数类型
- java - 引用后面序列化什么类
- .net-core - 为什么 DocuSignEnvelopeInformation 对象中没有 Voided 日期属性?
- angular - 由于某些库,无法构建 Angular 应用程序的 prod 版本
- python - 如何从 2D pytorch 张量中获取最大元素的行和列索引?
- javascript - 使用异步处理来自 Google Calendar API 的承诺
- c# - 缺少 Visual Studio“REST Api 客户端”
- c# - 'ComputeShader 不包含 SetMatrix 的定义'
- ml.net - ML.NET:用于 csv 加载的类型推断?
- sql - 使用 pandas.read_sql 查询带参数的数据库