使用函数参数隐藏成员函数

Shadowing a member function with a function argument

本文关键字:函数 成员 隐藏 参数      更新时间:2023-10-16

以下面的类为例

class A
{
int m_c;
public:
void B(int C);    
void C();
};

如果我使用-Wshadow参数进行编译,这将发出以下警告

memberFuncArg.cpp: In member function ‘void A::B(int)’:
memberFuncArg.cpp:12:16: warning: declaration of ‘C’ shadows a member of 'this' [-Wshadow]
void A::B(int C)
^

像这样用参数隐藏一个成员函数到另一个成员函数的后果是什么?

用参数隐藏成员函数的后果是什么

结果是,阅读代码的程序员可能会对C引用的实体感到困惑。他们可能已经习惯了C是成员功能的事实,并且合理地(但错误地(期望B内也是如此。

当参数不是类型int时,结果会更糟,而是一些其他类型的参数,可以用与成员函数相同的参数调用。然后,困惑的程序员会读取或写入C()并期望它调用成员函数,但行为将与预期不同。