// 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?
}
问问题
381 次
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 回答