2017-04-16 2 views
0

エンティティが内部スコープで再利用できる理由について私は疑問に思っていましたか?私がスコープ内で変数xを宣言したように、内部スコープ内で全く同じ別の変数を作成することができます。コンピュータが外部エンティティのメモリを削除してから内部エンティティに置き換えますか?または何が起こるか?なぜこのような機会がありますか?それは何のために良いですか?それは私を混乱させるだけです内部スコープでエンティティを再利用できるのはなぜですか? C++

ありがとう!私はそれが十分に説明されることを願っています

更新: "エンティティ"とは、私は識別子を意味すると思います。私を混乱させる何の 例:

int main() 
{ 
int x = 22; 
int y = 33; 

{ 
int x; 
x = 44; //now it is another variable 
y = 55; //now y (outer scope) is changed 

} 
} 
+0

「エンティティ」とはどういう意味ですか?あなたが意味することを説明するためにいくつかの(疑似)コードを追加できますか? –

+0

はい、保留... –

+0

同じ名前を持つ2つの異なる変数です。内側のxは外側のxを暗くします。 – Carcigenicate

答えて

1

全体としてのコンピュータは、あなたの変数とあなたのスコープとひどく心配していないです。おそらく、 "コンパイラ"と言うことになります。

いいえ、コンパイラは「外部エンティティのメモリを削除し、内部エンティティに置き換えません」。コンパイラは、外側のスコープにxのメモリ領域を割り当て、内側のスコープにxのメモリ領域を割り当て、外側のスコープにあるときにはxはメモリの最初の領域を参照します。内側の範囲にあるときは、xはメモリの2番目の領域を指します。だから、それはすべてかなり効率的です。

これが発生すると、内部がxが「シャドウ」の外側がxであると言います。

もちろん、内側のスコープが終了すると、xは再びメモリの最初の領域を参照するため、何も削除されません。

意見は、これが有用で有益かどうか、または避けるべきかどうかによって異なります。あなたがシャドウイングでやっていることは、「xという名前は、現在、それが外側の範囲にあるエンティティとは異なるエンティティを表している」と言っているので、それが有用で有益であると信じています。内部スコープ内から外部スコープのエンティティに誤ってアクセスします。コードの選択肢が少なくなるほどよいでしょう。

+0

@Carcigenicateうーん、あなたはおそらく正しいです。私は改正するつもりです。 –

+0

はい、私はコンパイラを意味しました、ありがとう!うわー、今それは私にはもっと意味があり、それがどのように動作するか知ることは素晴らしいです。どうもありがとうございます!! –

+1

私が新生児を「境界の定位」と呼ぶように、私は魔法のように消えません。それは、_context_があなたが名前を使用するときにあなたが参照しているものを決定することを意味します。 –

関連する問題