1

我做了一个自定义类,它涉及大量的数字和字符串计算。我通过只提供访问器而不使用增变器来使我的类不可变。一旦对象被构建,就不会改变它的一个属性。C++不可变的自定义类通过引用或值传递

我从这里的问题是,目前我的功能所有是通过价值。如果你有一个不可变的对象,那么即使需要引用也是通过引用的?由于副本需要不断创建,因此在内存方面浪费了价值?

例如:

class MyInteger 
{ 
    private: 
     const int val; 

    public: 
     MyInteger(const int a) : val(a) { };  
     int getValue() const { return val; } 
     MyInteger add(const MyInteger other) 
     { 
      return MyInteger(val + other.getValue()); 
     } 
} 
+1

通过引用来传递const。我认为对于内置类型而言,它并不重要。 – 2017-02-04 14:44:52

+0

@RawN我不明白你的意思? – Hatefiend

+0

'getValue'必须是'const'。 –

回答

1

通行证按值需要复制。如果你的班级很大并且复制费用高,你可以通过引用来避免这种复制。

由于它是不可变的,你可以通过引用const来传递它。

class MyInteger 
{ 
    private: 
     const int val; 

    public: 
     MyInteger(const int a) : val(a) { };  
     int getValue() const { return val; } 

     MyInteger add(const MyInteger& other) const // Note this is passed by reference to const now 
     //       ~ 
     { 
      return MyInteger(val + other.getValue()); 
     } 
} 
+2

'//注意这是按值传递的.'你应该删除这个评论。 –

+0

当我想到我的问题时,我忘了添加'const'。我不太确定'const'与我的问题有什么关系,除了'增加'不应该修改'other'变量的小优化外。然而,我仍然没有真正掌握何时使用价值传递。 – Hatefiend

+0

@Hatefiend看看这里:[链接](http://stackoverflow.com/questions/270408/is-it-better-in-c-to-pass-by-value-or-pass-by-constant-参考) – peval27