// declare a class with private variable “int * _a”
// declare a function of this class, foo()
Void foo() {
int * _a; // 1. Does this re-declaration then make _a equal to an unknown value?
// 2. Does a go out of scope after foo() returns?
}
2 回答
7
- 这个重新声明是否
_a等于一个未知值?
不,这不是“重新声明”。它是一个名为 的局部变量的声明_a。它是未初始化的。
它与类成员变量没有任何关系_a。在声明了 local 之后_a,就不_a能再使用 using 访问成员变量了_a(因为_a引用了局部变量!),但是可以使用this->_a.
foo()退货后是否超出范围?
是的。局部变量在声明它们的范围结束时超出范围(这就是“超出范围”的来源)。
于 2010-11-05T22:29:04.887 回答
1
这就是所谓的阴影。foo()的本地指针_a隐藏类的同名成员指针。鉴于它foo()是类的成员,任何对的引用都_a将解析为本地指针。此外,与任何作用域变量一样,此指针在超出作用域时会自动销毁自身。不用说,只要其拥有的实例还活着,成员指针就会一直活着。
要访问会员数据,您必须说this->_a.
于 2010-11-05T22:31:31.610 回答