2012-04-16 23 views
1
#include <iostream> 

using namespace std; 

int d = 10; 

int main() 
{ 
    int d = 20; 

    { 
     int d = 30; 
     cout << d << endl << ::d; // what does it mean? 
    } 

    return 0; 
} 

出力は次のとおりです。"::" 変数名cの前に++

"::d" は10を与える理由を私は理解していませんか?誰かが私にそれを説明できますか?

+1

C++グループは、言語を非常に複雑にしたいと思っていたので、彼らがソフトウェアで動くことができる唯一の人間であるため、極端な時間単位のレートを10年後に保証します(Snark Snark)。 –

+0

'\ file.txt'が' \ subdirectory \ file.txt'と同じでないのと同じ理由があります。 – MSalters

答えて

11

::dd EDIT

グローバル名前空間からのことを意味します。似た名前 dを持つ三つの異なる変数があります。 1つはグローバルネームスペース d=10にあり、1つは main20)のスコープの内側にあり、最後はメイン関数の内部ブロック( 30)の内側にあります。

対応する変数にアクセスできる(名前で)ブロック内には、常にグローバル名前空間(::)にアクセスできます。

+0

しかし、 'd = 20'がありますが、なぜその値に変わらないのですか? – iyazici

+1

@İbrahimYazıcıそのコードには3つのスコープレベルがあります。グローバルスコープ、main()のスコープ、最も内側のスコープ(})。そのプログラムで宣言された3つの別個の変数があります。あなたが値を再割り当てし続けるものではありません。 –

+0

@qehgtあなたが正しいのですが、スコープルールについて細部まで説明し、そのコードで実際に何が起こっているのかが分かると、この質問に遭遇する人にとっては非常に役立つかもしれません。 –

関連する問題