在 class 中使用相同的变量是否可以在构造函数 C++ 中使用?

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

如果我有 class:

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

根据以下选择从构造函数初始化 class 变量 '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. 相同
  5. 让成员引用对象: 与 2 相同。
  6. 可读性:基于意见。
  7. 可扩展性:基于意见。

就命名问题而言:恕我直言,它主要基于意见。就个人而言,对于构造函数的参数,我也使用后缀下划线。

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

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

但是!我认为标识符名称在适当性方面是倒退的。 i_应该是私有成员变量,i应该是构造函数参数

我对每个 "choice" 的笔记: 1)在这里很容易看出哪些参数相互对应 2)这里是明确的 3) 我认为您已经通过措辞 'Completely Inconsistent' :).

总结了您对此的看法