[英]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?
}
- 然后,此重新声明会使
_a
等于未知值吗?
不。这不是“重新声明”。 它是名为_a
的局部变量的声明。 它尚未初始化。
它与类成员变量_a
没有任何关系。 在声明本地_a
,您不能再使用_a
访问成员变量_a
(因为_a
引用了本地变量!),但是您可以使用_a
this->_a
来引用它。
foo()
返回后是否超出范围?
是。 局部变量在声明它们的范围结束时超出范围(这就是“超出范围”的含义)。
这就是所谓的阴影 。 foo()
的本地指针_a
了同名类的成员指针。 假设foo()
是该类的成员,对_a
任何引用都将解析为本地指针。 此外,作为任何作用域变量,当指针超出作用域时,它将自动销毁自身。 成员指针,不用说,只要它拥有的实例还活着,它就会一直活着。
要访问成员数据,您必须说this->_a
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.