和嵌套类不同,局部类的成员有严格的限制。局部类的成员全部都必须定义在类内部,包括成员函数。
    不允许定义static成员。
    只能访问外层作用域中的类型名、静态变量、枚举成员。
    如果局部类在函数内部,不能访问函数的局部变量。
    常规的访问保护规则对局部类同样适用,外层函数对局部类的私有成员没有任何访问特权 。

    局部类中的名字查找,和一般的名字查找类似,现在本地作用域,再到外层作用域,……,最后到全局作用域。

    1. int a, val;
    2. void foo(int val){
    3. static int si;
    4. enum Loe { a = 1024, b};
    5. struct Bar{ // Bar 是 foo 的局部类
    6. Loc locVal; // 正确:使用一个局部类型名
    7. int barVal;
    8. void fooBar(Loc l = a){ // 正确:默认实参是Loc::a
    9. barVal = val; // 错误:val是foo的局部变量
    10. barVal = ::val; // 正确:使用一个全局对象
    11. barVal = si; // 正确:使用一个静态局部对象
    12. locVal = b; // 正确:使用一个枚举成员
    13. }
    14. };
    15. }
    1. // 局部类内部定义嵌套类
    2. void foo ()
    3. class Bar {
    4. public:
    5. //...
    6. class Nested; // 声明Nested嵌套类
    7. };
    8. class Bar::Nested { // 定义Nested类,可以在局部类Bar相同作用域中定义Bar的成员。
    9. //...
    10. };
    11. }