这是我在编写 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)
中的方式,参数名为 x
与 Foo
的成员变量同名.
我通常只使用 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/