c++ - 命名函数参数与类成员相同

标签 c++ standards

这是我在编写 C++ 程序时经常做的事情,一段时间以来我一直在想这是否是一个“坏”习惯(这种行为是否标准化?)

假设我有一个类:

Class Foo {
  public:
    Foo(int x) {
      //this->x is the member "x" of Foo
      //x is the paramater "x" to the function
      this->x = x; //Sets Foo::x to x (parameter x)
    }

  private:
    int x;


};

注意 Foo::Foo(int x) 中的方式,参数名为 xFoo 的成员变量同名.

我通常只使用 use this->x = x;为成员变量分配参数的值,这似乎对我有用(我通常使用 MSVC)。在 MSVC(我认为是 GCC)中,访问 x将访问名为 x 的参数而不是名为 x成员 .这是所有 C++ 编译器的标准化行为吗?有没有什么可以阻止编译器只关联 x使用成员变量而不是参数变量? (例如:this->x; 等同于 this->x = this->x; )

最佳答案

是的,使用任何兼容的编译器,参数x 将隐藏成员x。然而,比你写的更有趣的替代方法是:

class Foo {
public:
    Foo(int x) : x(x) {}
private:
    int x;
};

除了不可读之外,它实际上会完全按照您的意愿行事。

关于c++ - 命名函数参数与类成员相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19460624/

相关文章:

c++ - N4140 §8.2[dcl.ambig.res]/2 中的注释

c# - 用于 C# 代码的 Pascal 大小写或 Camel 大小写?

javascript - 在 javascript 中检测 HTML5 拖放支持

HTML:IE9 标准模式在每个页面上打印 TFOOT

c - 位移位和整数提升?

postgresql - Postgres 9.0 + 翻译函数和ascii码

c++ - 根据状态在不同文件上叠加图标

c++ - 显示房屋的 OpenGL 功能不起作用

c++ - 使用 LLVM 链接器生成 C 代码

c++ - 奇怪的 C++ 类型转换