据我了解,在C++中,内部函数参数列表中声明一个类自动进入封闭范围:类声明
void f(struct A *p) {}
void g() { A *p; f(p); }
等同于:
struct A;
void f(A *p) {}
void g() { A *p; f(p); }
什么节在C++标准中指定了这种行为?那么C呢?
嗯,我猜C在这种情况下不遵循C++。 Visual Studio中不编译这个代码是C模式:
void g(struct A { int a; } a);
struct A a; // 'a' uses undefined struct 'A'
你的最后一个例子也不能用C++编译。 – molbdnilo
是的,我忘了注意C++不允许在函数参数列表里面定义类的定义。我的意思是,在这种情况下,C没有遵循C++,参数列表中的类声明'泄漏'到函数声明范围中。 – igntec