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

新手上路,请多包涵

所以我有一些非常广泛的功能代码,其中主要数据类型是不可变的结构/类。通过将成员变量和任何方法设为 const,我一直在声明不可变性的方式是“实际上是不可变的”。

 struct RockSolid {
   const float x;
   const float y;
   float MakeHarderConcrete() const { return x + y; }
}

这实际上是 C++ 中“我们应该这样做”的方式吗?或者,还有更好的方法?

原文由 BlamKiwi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 620
1 个回答

您提出的方式非常好,除非在您的代码中您需要分配 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 对象是(伪)不可变对象,但您仍然可以进行分配。

原文由 chrphb 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题