首页 > 后端开发 > C++ > C 中构造函数参数和成员变量名称是否允许重叠?

C 中构造函数参数和成员变量名称是否允许重叠?

Mary-Kate Olsen
发布: 2024-11-12 21:49:01
原创
561 人浏览过

Are Constructor Argument and Member Variable Names Allowed to Overlap in C  ?

构造函数中的初始化器列表:与成员变量重叠名称

使用与构造函数参数相同的名称来初始化成员变量的做法引起了疑问关于其有效性以及对 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板