构造函数中的初始化器列表:与成员变量重叠名称
使用与构造函数参数相同的名称来初始化成员变量的做法引起了疑问关于其有效性以及对 C 标准的遵守情况。让我们探讨一下标准对此实践的看法。
根据 C 标准第 §12.6.2/7,成员初始值设定项的表达式列表中的表达式在构造函数的范围内进行计算。因此,明确允许构造函数参数和成员变量使用相同的名称。
例如,以下代码片段完全符合 C 标准:
class Blah { std::vector<int> vec; public: Blah(std::vector<int> vec): vec(vec) {} // ... };
In在这种情况下,构造函数参数 vec 用于初始化成员变量 vec,没有任何歧义。
此外,标准允许在成员初始值设定项中使用 this 指针来引用正在初始化的对象。这使得可以基于其他成员变量来初始化成员变量,如下例所示:
class X { int a; int b; int i; int j; public: X(int i): r(a), b(i), i(i), j(this->i) {} // ... };
但是,值得注意的是,将构造函数参数作为 const 引用传递可以避免出现错误,从而提高代码效率不必要地复制原始矢量对象。这可以通过修改构造函数来实现,如下所示:
Blah(const std::vector<int> &vec): vec(vec) {}
以上是C 中构造函数参数和成员变量名称是否允许重叠?的详细内容。更多信息请关注PHP中文网其他相关文章!