// 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
。ローカルの宣言後、を使用し_a
てメンバー変数にアクセスすることはできなくなります(ローカル変数を参照するためです!)が、を使用して参照することはできます。_a
_a
_a
this->_a
foo()
返品後にスコープ外になりますか?
はい。ローカル変数は、宣言されたスコープが終了するとスコープ外になります(これが「スコープ外」の原因です)。
于 2010-11-05T22:29:04.887 に答える
1
これがいわゆるシャドウイングです。foo()
のローカルポインタ_a
は、同じ名前のクラスのメンバーポインタをシャドウします。それfoo()
がクラスのメンバーであるとすると、への参照はすべて_a
ローカルポインタに解決されます。さらに、スコープ変数と同様に、このポインターはスコープ外になると自動的に破棄されます。言うまでもなく、メンバーポインターは、それを所有するインスタンスが存続している限り存続します。
メンバーデータにアクセスするには、言う必要がありますthis->_a
。
于 2010-11-05T22:31:31.610 に答える