今天进入一个有趣的问题,我试图理解为什么.
考虑以下:
class Base
{
public:
Base(){}
~Base(){}
static void function1(){}
void function2()
{
int function1;
function1 = 0;
function1(); //<-compiler error
function1 = 1;
}
};
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
表观调用括号前的表达式必须具有(指向 - )函数类型
我想我明白为什么我收到这个错误:
当function1它本身被调用时function2(),它实际上是一个函数指针function1().
里面的范围function2,当int function1被宣布," function1变"阴影" function1函数指针".
当function1()在内部调用时function2(),它假定function1是变量并且给出错误.
通过调用Base::function1();内部来解决这个问题function2().
我的问题是:为什么编译器在声明时没有出错int function1;?这不应该被允许吗?