2017-08-20 6 views
3

ローカルとして、それは、このようなローカルとして、それが再宣言し、グローバルとして変数を宣言するために何を意味するとして変数を宣言:グローバルその後、-Shadowing-

int a = 0; 
int main() 
{ 
    int a = 7; 
    return 0; 
} 

私が参照して、この例を見てしかし、私はそれを理解していません。これはあなただけaを使用する場合は、あなたのmain方法では、あなたはそれがglobal oneをシャドウするので、そのメソッド内で宣言されている1を参照することを意味しますC++

+0

これは合法ですが、実際にはほとんどの場合非常に味が悪いことに注意してください。このようにコード化することはほとんどありません。変数の[scope](https://en.wikipedia.org/wiki/Scope_(computer_science))の詳細を読む。 –

+0

よろしくお願い致します。 –

+1

シャドウイングと呼ばれています。難読化できるように慎重に使用してください。 – Bathsheba

答えて

3

と私はプログラミングの初心者だ考慮に入れてください。 mainglobal oneにアクセスするには、::aからアクセスする必要があります。 aを使用する他の方法では、そのファイルのすべてのメソッドについてglobalという名前を参照します。スコープはこのように動作します。変数が見つからない場合は、外側のスコープなどをグローバルスコープで検索しようとします。

一つのアドバイスは、あなたが変数のスコープを理解する必要があり、グローバル変数

+0

私は今、2つの変数があることを意味しますか? –

+0

@ ibrahim.fathyはい、2つの異なる変数があります。 'main'では、ローカル変数はグローバル変数をシャドウします。詳細は –

+0

をご覧くださいありがとうございます、私は編集後非常によく理解しました –

1

から避けます。メソッド/中括弧内で定義された変数は、その中括弧内で参照している限り有効です。 あなたのコードでは、ローカルの "a"にアクセスするには、直接&を使用して、グローバル "a"(main()の外で定義された)を使用し、スコープ解決演算子(:: a)の接頭辞を

しかし、このようなシナリオは避けてください。一意の名前を付ける。