可以用另一个类(内部类)的方法编写一个类,访问方法变量吗?我的意思是在下面的代码中:
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?";
};
};
这是合法的吗?'a'的值增加了吗?请提出建议。
谢谢, 帕。
答案 0 :(得分:4)
不合法
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
-end example]
2。封闭函数对本地类的成员没有特殊访问权限;它遵守通常的访问规则(第11条)。如果定义了本地类的成员函数,则应在其类定义中定义它们。
3。如果类X是本地类,则嵌套类Y可以在类X中声明,稍后在类X的定义中定义,或者稍后在与类X的定义相同的范围内定义。嵌套在本地类中的类是当地班级。
4。本地类不应具有静态数据成员。
答案 1 :(得分:1)
简短的回答,没有。 C ++中的本地类无法访问其封闭的函数变量(有一些注意事项)。您可以阅读有关C ++本地类here的更多信息,还可以查看此nice SO answer。强调:
在函数定义中声明了本地类。本地类中的声明只能使用类型名称,枚举,封闭范围内的静态变量,以及外部变量和函数。
int x; // global variable
void f() // function definition
{
static int y; // static variable y can be used by
// local class
int x; // auto variable x cannot be used by
// local class
extern int g(); // extern function g can be used by
// local class
class local // local class
{
int g() { return x; } // error, local variable x
// cannot be used by g
int h() { return y; } // valid,static variable y
int k() { return ::x; } // valid, global x
int l() { return g(); } // valid, extern function g
};
}
int main()
{
local* z; // error: the class local is not visible
// ...}