簡體   English   中英

常量引用與內聯 getter - C++

[英]Const reference vs inline getter - C++

我有一個帶有私有字段的類。 該字段只寫在類內部,但必須從外部可讀。 哪個選項更可取,為什么? 首先,使用const引用

class Test {
public:
    const int &field; // can read outside
    
    inline Test() noexcept: field(_field) {}
    
    void someMethod() {
        _field = 123; // writing occurs only inside the class
    }
private:
    int _field;
};

或者第二個,使用內聯 getter:

class Test {
public:
    void someMethod() {
        _field = 123; // writing occurs only inside the class
    }
    
    inline int field() const noexcept { // can call outside
        return _field;
    }  
private:
    int _field;
};

避免使用引用類型數據成員的原因有很多:

  • 它使對象大小膨脹
  • 所有賦值運算符默認為刪除
  • 默認的復制構造函數變得錯誤,將新副本的生命周期與復制對象的生命周期聯系起來。
  • 該對象不再是標准布局,也不再是可簡單復制的

如果你真的想公開一個引用,就作為成員函數的返回類型這樣做:

const int& field() const { return field_; } // avoid leading underscores in application code

但是,通常情況下,返回值會具有更高的性能並且更易於調用代碼使用。

  • 復制一個小值與形成一個引用(復制一個指針)一樣便宜
  • 編譯器不必擔心別名
  • 程序員不必擔心走樣

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM