C++ 在C++;

C++ 在C++;,c++,class,struct,constants,immutability,C++,Class,Struct,Constants,Immutability,我想创建一个简单的结构/类,它将表示一些不可变的普通数据 方式1: 方式2: 我能看到的唯一区别是第一种方式更简单,第二种方式更适合于潜在的进一步班级扩展。还有什么不同吗(在设计、速度等方面)?我同意第二种方法。目前,它只是一个POD,但是如果您想添加额外的功能,您需要通过成员函数来实现,然后为了保持一致性,您也可以通过方法来访问数据。例如: class Immutable { public: Immutable(int a, int b) : a(a), b(b) {} int

我想创建一个简单的结构/类,它将表示一些不可变的普通数据

方式1: 方式2:
我能看到的唯一区别是第一种方式更简单,第二种方式更适合于潜在的进一步班级扩展。还有什么不同吗(在设计、速度等方面)?

我同意第二种方法。目前,它只是一个POD,但是如果您想添加额外的功能,您需要通过成员函数来实现,然后为了保持一致性,您也可以通过方法来访问数据。例如:

class Immutable {
public:
    Immutable(int a, int b) : a(a), b(b) {}
    int getA() const { return a; }
    int getB() const { return b; }

    int add() const {return a + b}
    int sub() const {return a - b}
private:
    int a;
    int b;
};
如何获得一致的方法,而不是在某些情况下调用方法并直接访问字段


此外,通过隐藏成员字段,您可以阻止某些小丑丢弃
常量并修改值。我知道这是未定义的行为,但总有人认为他们会这么做,而不是复制不可变对象。让他们很难做到这一点并不是坏事。

我会选择第二种方法。目前,它只是一个POD,但是如果您想添加额外的功能,您需要通过成员函数来实现,然后为了保持一致性,您也可以通过方法来访问数据。例如:

class Immutable {
public:
    Immutable(int a, int b) : a(a), b(b) {}
    int getA() const { return a; }
    int getB() const { return b; }

    int add() const {return a + b}
    int sub() const {return a - b}
private:
    int a;
    int b;
};
如何获得一致的方法,而不是在某些情况下调用方法并直接访问字段


此外,通过隐藏成员字段,您可以阻止某些小丑丢弃
常量并修改值。我知道这是未定义的行为,但总有人认为他们会这么做,而不是复制不可变对象。让他们很难做到这一点并不是坏事。

因为这只是第一步,所以第一步更有意义。此外,您不需要为POD结构定义构造函数,这些结构被认为是聚合的,可以直接初始化。结构也更清楚地表明它只是POD。编写额外的代码“以防万一”违反了。为变化做好准备,但要等待真正的需求。同样值得一读的是,imo:因为它只是一个吊舱,所以第一个更有意义。此外,您不需要为POD结构定义构造函数,这些结构被认为是聚合的,可以直接初始化。结构也更清楚地表明它只是POD。编写额外的代码“以防万一”违反了。为改变做好准备,但要等待真正的需求。同样值得一读的是:谢谢你的回答。另外,关于
常量的观点也很好:我没想过。谢谢你的回答。另外,关于
常量的观点也很好:我没有想到这一点。
class Immutable {
public:
    Immutable(int a, int b) : a(a), b(b) {}
    int getA() const { return a; }
    int getB() const { return b; }

    int add() const {return a + b}
    int sub() const {return a - b}
private:
    int a;
    int b;
};