繁体   English   中英

C ++变量范围

[英]C++ variable scope

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

}
  1. 然后,此重新声明会使_a等于未知值吗?

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

它与类成员变量_a没有任何关系。 在声明本地_a ,您不能再使用_a访问成员变量_a (因为_a引用了本地变量!),但是您可以使用_a this->_a来引用它。

  1. foo()返回后是否超出范围?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM