1
// 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?

}
4

2 回答 2

7
  1. 这个重新声明是否_a等于一个未知值?

不,这不是“重新声明”。它是一个名为 的局部变量的声明_a。它是未初始化的。

它与类成员变量没有任何关系_a。在声明了 local 之后_a,就不_a能再使用 using 访问成员变量了_a(因为_a引用了局部变量!),但是可以使用this->_a.

  1. foo()退货后是否超出范围?

是的。局部变量在声明它们的范围结束时超出范围(这就是“超出范围”的来源)。

于 2010-11-05T22:29:04.887 回答
1

这就是所谓的阴影foo()的本地指针_a隐藏类的同名成员指针。鉴于它foo()是类的成员,任何对的引用都_a将解析为本地指针。此外,与任何作用域变量一样,此指针在超出作用域时会自动销毁自身。不用说,只要其拥有的实例还活着,成员指针就会一直活着。

要访问会员数据,您必须说this->_a.

于 2010-11-05T22:31:31.610 回答