在 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_){}
^^^^^
原因:
- 性能:避免不必要地调用成员的默认构造函数。
- 拥有不可默认构造的成员: 如果您有不可默认构造的成员变量(即,它们没有默认构造函数),您必须初始化它们在初始化列表中。
- 有成员
const
-合格: 与 2. 相同
- 让成员引用对象: 与 2 相同。
- 可读性:基于意见。
- 可扩展性:基于意见。
就命名问题而言:恕我直言,它主要基于意见。就个人而言,对于构造函数的参数,我也使用后缀下划线。
我同意@sehe,澄清他的初始化列表的上下文:
className::className(int i_) : i(i_) {}
但是!我认为标识符名称在适当性方面是倒退的。 i_应该是私有成员变量,i应该是构造函数参数
我对每个 "choice" 的笔记:
1)在这里很容易看出哪些参数相互对应
2)这里是明确的
3) 我认为您已经通过措辞 'Completely Inconsistent' :).
总结了您对此的看法
如果我有 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_){}
^^^^^
原因:
- 性能:避免不必要地调用成员的默认构造函数。
- 拥有不可默认构造的成员: 如果您有不可默认构造的成员变量(即,它们没有默认构造函数),您必须初始化它们在初始化列表中。
- 有成员
const
-合格: 与 2. 相同
- 让成员引用对象: 与 2 相同。
- 可读性:基于意见。
- 可扩展性:基于意见。
就命名问题而言:恕我直言,它主要基于意见。就个人而言,对于构造函数的参数,我也使用后缀下划线。
我同意@sehe,澄清他的初始化列表的上下文:
className::className(int i_) : i(i_) {}
但是!我认为标识符名称在适当性方面是倒退的。 i_应该是私有成员变量,i应该是构造函数参数
我对每个 "choice" 的笔记: 1)在这里很容易看出哪些参数相互对应 2)这里是明确的 3) 我认为您已经通过措辞 'Completely Inconsistent' :).
总结了您对此的看法