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