不,它是不合法的
class B
是本地類到methodA()
。
class B
無法訪問封閉函數的非靜態「自動」局部變量。但它可以從封閉範圍訪問靜態變量。
有什麼本地類可以訪問的限制。
下面是從C++標準的參考:
9.8本地類聲明[class.local]
- 一個類可以一個函數定義中所定義;這樣的班級被稱爲本地班級。本地類的名稱是其封閉範圍的本地名稱。本地類位於封閉範圍的範圍內,並且與封閉函數具有相同的對函數外名稱的訪問。本地類中的聲明只能使用類型名稱,靜態變量,外部變量和函數以及封閉範圍中的枚舉器。
[實施例:
int x;
void f()
{
static int s ;
int x;
extern int g();
struct local {
int g() { return x; } // error: x is auto
int h() { return s; } // OK
int k() { return ::x; } // OK
int l() { return g(); } // OK
};
// ...
}
local* p = 0; // error: local not in scope
末端示例]
2.一種封閉函數具有到本地類的成員沒有特殊的訪問;它服從通常的訪問規則(第11章)。如果完全定義了本地類的成員函數,則應在其類定義範圍內進行定義。
3.如果類X是一個本地類,則嵌套類Y可以在類X中聲明,稍後在類X的定義中定義或稍後在與類X的定義相同的範圍內定義。嵌套在本地類中的類是本地類。
4.本地類不得有靜態數據成員。
好..你爲什麼不嘗試呢? –
http://www.comeaucomputing.com/tryitout/「第9行:錯誤:不允許引用封閉函數的局部變量」 –
實際上,Im在遠程位置,而我在此m/c中沒有編譯器:( – user844631