據我瞭解,在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