所以我有一些相当广泛的功能代码,其中主要数据类型是不可变的结构/类。我声明不变性的方式是通过将成员变量和任何方法设置为 const 来“实际上是不可变的”。
struct RockSolid {
const float x;
const float y;
float MakeHarderConcrete() const { return x + y; }
}
这实际上是 C++ 中“我们应该这样做”的方式吗?或者,还有更好的方法?
您提出的方法非常好,除非在您的代码中您需要对 RockSolid 变量进行赋值,如下所示:
RockSolid a(0,1);
RockSolid b(0,1);
a = b;
这不起作用,因为复制赋值运算符会被编译器删除。
因此,另一种方法是将结构重写为具有私有数据成员和仅公共 const 函数的类。
class RockSolid {
private:
float x;
float y;
public:
RockSolid(float _x, float _y) : x(_x), y(_y) {
}
float MakeHarderConcrete() const { return x + y; }
float getX() const { return x; }
float getY() const { return y; }
}
通过这种方式,您的 RockSolid 对象是(伪)不可变的,但您仍然可以进行分配。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)