gpt4 book ai didi

c++ - 声明 C++ 不可变类的惯用方式

转载 作者:IT老高 更新时间:2023-10-28 12:37:31 25 4
gpt4 key购买 nike

所以我有一些相当广泛的功能代码,其中主要数据类型是不可变的结构/类。通过将成员变量和任何方法设为 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;

这不起作用,因为复制赋值运算符会被编译器删除。

因此,另一种选择是将结构重写为具有私有(private)数据成员的类,并且只有公共(public) 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 对象是(伪)不可变对象(immutable对象),但您仍然可以进行分配。

关于c++ - 声明 C++ 不可变类的惯用方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26858518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com