用另一个类(内部类)的方法编写的类可以访问方法变量吗?我的意思是在下面的代码中:
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' 的值会增加吗?请建议如何。
谢谢,帕万。
不,它是不合法的
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
Run Code Online (Sandbox Code Playgroud)
—结束示例]
2. 封闭函数对本地类的成员没有特殊的访问权限;它遵守通常的访问规则(第 11 条)。局部类的成员函数应该在它们的类定义中定义,如果它们被定义的话。
3. 如果类 X 是本地类,则嵌套类 Y 可以在类 X 中声明,然后在类 X 的定义中定义,或者稍后在与类 X 的定义相同的范围内定义。 嵌套在本地类中的类是本地类。
4. 本地类不应有静态数据成员。
| 归档时间: |
|
| 查看次数: |
4701 次 |
| 最近记录: |