内部类访问

use*_*631 7 c++ nested-class

用另一个类(内部类)的方法编写的类可以访问方法变量吗?我的意思是在下面的代码中:

class A
{
  void methodA( int a )
  {
    class B
    {
      void processA()
      {
         a++;
      }
    };
     std::cout<<"Does this program compile?";
     std::cout<<"Does the value of the variable 'a' increments?";
  };
Run Code Online (Sandbox Code Playgroud)

};

这合法吗? 'a' 的值会增加吗?请建议如何。

谢谢,帕万。

Alo*_*ave 6

不,它是不合法的
class B是一个本地类methodA()

class B无法访问封闭函数的非静态“自动”局部变量。但它可以从封闭范围访问静态变量。

本地类可以访问的内容有几个限制。

这是来自 C++ 标准的参考:

9.8 本地类声明 [class.local]

  1. 类可以在函数定义中定义;这样的类称为局部类。本地类的名​​称在其封闭范围内是本地的。本地类在封闭作用域的范围内,并且与封闭函数一样具有对函数外部名称的访问权限。局部类中的声明只能使用封闭范围内的类型名称、静态变量、外部变量和函数以及枚举数。

[例子:

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
Run Code Online (Sandbox Code Playgroud)

—结束示例]

2. 封闭函数对本地类的成员没有特殊的访问权限;它遵守通常的访问规则(第 11 条)。局部类的成员函数应该在它们的类定义中定义,如果它们被定义的话。

3. 如果类 X 是本地类,则嵌套类 Y 可以在类 X 中声明,然后在类 X 的定义中定义,或者稍后在与类 X 的定义相同的范围内定义。 嵌套在本地类中的类是本地类。

4. 本地类不应有静态数据成员。