【发布时间】:2024-01-15 08:15:01
【问题描述】:
自从我开始接触 C++ 已经有一段时间了,但我想确保我在这样做时坚持最佳实践,包括 const 正确。
我目前正在为游戏框架构建一个代码库,并且我有以下类(为简单起见进行了总结):
class Screen
{
public:
Clear();
}
和
class Game
{
private:
Screen* screen;
protected:
const Screen* GetScreen() const;
}
为简洁起见,我省略了其余部分,但我只想说,Game 类负责创建 Screen 类实例。创建后,只能通过GetScreen()方法访问。
这个想法是,当创建一个新游戏时,我将从这个基类继承,例如,在渲染循环期间,我想清除屏幕以重绘下一帧。现在,在我上面的定义中,在使用GetScreen() 方法时不允许调用Clear() 方法,因为它不是const。 clear 方法实际上会改变类的内部工作方式(由于先前显示的图像被清除),所以这就是我将const 声明排除在定义之外的原因。如果我做到了const,那么我将不得不将Screen 类的一些内部工作作为mutable,但从我所读到的内容来看,这不是非常正确的。
所以,我的问题有两个部分。我是否应该将void Clear() 更改为void Clear() const 并制作部分内部工作mutable?
或者是允许我使Game 类的screen 成员只能由Game 类设置一次的替代方法,这样我就可以在其余时间访问非常量成员函数程序的运行时间。
感谢您的帮助。
【问题讨论】:
-
您似乎希望
screen成为Screen&或Screen* const而不是const Screen*。
标签: c++ constants mutable const-correctness