簡體   English   中英

在類中使用相同的變量可以在構造函數C ++中使用嗎?

[英]Is using the same variable in a class ok to use in the constructor C++?

如果我上課:

class className{
    int i;
public:
    className(int value);
};

按照以下選擇,從構造函數初始化類變量“ i”的最佳實踐是什么?

1)使用帶下划線的實際字段名稱:

className::className(int i_){
    i = i_;
}

2)將實際的字段名稱與“ this”一起使用:

className::className(int i){
    this->i = i;
}

3)完全不一致的事情,例如:

className::className(int value){
    i = value;
}

我已經看到這個問題直接針對Java解決,但對於C ++則沒有那么多。 我問是因為我更喜歡數字2,因為我個人更喜歡使用較少的變量名。 但是,我想知道這對編譯器或鏈接器等可能意味着什么。我還想堅持使用C ++規范。

非常感謝!

是的,沒關系。

有些人實際上認為它是慣用的。

但是,您的示例都缺少初始化列表的使用方法:)

class className{
    int i;
public:
    className(int value) : i(value) {};
};

我建議避免名稱重復。 如果您不小心弄亂了代碼,它會使編譯器抱怨。

最佳實踐是在初始化列表中初始化成員變量:

className::className(int i_) : i(i_){}
                               ^^^^^

原因

  1. 性能 :避免不必要地調用成員的默認構造函數。
  2. 使成員不能默認構造:如果成員變量不是默認構造的(即,它們沒有默認構造函數),則必須在初始化列表中對其進行初始化。
  3. 具有成員const合格的成員:與2相同。
  4. 讓成員引用對象:與2相同。
  5. 可讀性 :基於意見。
  6. 可擴展性 :基於意見。

至於命名問題:恕我直言,它主要基於意見。 就個人而言,對於構造函數的參數,我也使用后綴下划線。

我同意@sehe,以澄清他的初始化列表的上下文:

className::className(int i_) : i(i_) {}

然而! 我認為標識符名稱在適當性方面是倒退的。 i_應該是私有成員變量,而i應該是構造函數參數。

我對每個“選擇”的注釋:1)在這里很容易看出哪些參數彼此對應2)在這里很明確3)我認為您已經通過措辭“完全不一致”來總結您的觀點:)。

暫無
暫無

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

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