1. 程式人生 > >C++之局部類

C++之局部類

inside art 這一 以及 內聯 平時 們的 註意 不能

  局部類,我個人在平時的編程中真的沒有用過,其實也不懂,最近想再打牢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類 { //.... }; }

需要註意的是,嵌套類也是局部類,必須遵循局部類的規定,嵌套類的成員也必須定義在嵌套類內部

C++之局部類