局部類,我個人在平時的編程中真的沒有用過,其實也不懂,最近想再打牢C++基礎重翻了《C++ primer》才看到局部類這一名詞,通過“局部”一詞聯想到局部變
量,能大概猜測局部類是個什么東東。書中定義為:定義在某個函數內部的類,稱為局部類。局部類定義的類型只能在定義該類的作用域中可見。局部類的所有成員變
量以及成員函數必須完整定義在類的內部。因為要全部定義在類的內部,好像感覺是內聯哈(其實具體實現我也不太清楚),這就導致我們的局部類中的函數定義不
能復雜,不然在函數中定義類還那么復雜其可讀性就很差了,另外需要注意的是在局部類中不能聲明靜態數據成員。
局部類的訪問權限受到很多限制,局部類只能訪問外層作用域定義的類型,靜態變量以及枚舉成員。如果局部類定義在某個函數的內部,那么該函數的普通局部
變量不能被該局部類使用。
int val = 100; void foo(int val) { static int si; enum loc { a = 1024, b }; int m = 0;
struct Bar { loc locVal; int BarVal; void BarTest() { BarVal = val;//錯誤:val為foo的局部變量 BarVal = m;//錯誤:m也為foo的局部變量 BarVal = ::val;//正確:使用了全局變量 BarVal = si; BarVal = loc::b;//使用枚舉成員 } }; }
外層函數對局部類的私有成員沒有任何訪問權限,我們可以將外部函數聲明為友元,然而更多的時候將其成員聲明為公有的。局部類也是可以嵌套的,嵌套類的定
義可以在局部類的之外,但是其定義要和局部類在一個作用域內!
int val = 100; void foo(int val) { static int si; enum loc { a = 1024, b }; int m = 0; struct Bar { class InsideClass;//聲明InsideClass類 }; class Bar::InsideClass//定義InsideClass類 { //.... }; }
需要注意的是,嵌套類也是局部類,必須遵循局部類的規定,嵌套類的成員也必須定義在嵌套類內部!