2010-12-03 10 views
5

私はC++の練習テストを受けていますが、私はアクセススコープと宣言に関する質問のセットと混同しています。メインC++グローバルスコープの問題を混乱させます

int x = 5; 
int main(int argc, char** argv) 
{ 
    int x = x; 
    return 0; 
} 

ANSの最後にローカル変数xの値は何

:両方の質問は、私は必要answers..whatが適切な説明である知っている各other..Iに関連しています。不定

メインの最後にあるyの値は何ですか?

const int x = 5; 
    int main(int argc, char** argv) 
    { 
     int x[x]; 
     int y = sizeof(x)/sizeof(int); 
     return 0; 
    } 

答え:5

答えて

8

これは、インナーxが存在(その範囲の開始)になるとによって制御されます。一部では、標準状態(現在の標準では3.3.1、今後のいずれかで3.3.2)(私のイタリック体):

宣言のポイント名はすぐに後にその完全な宣言子であるとの前にイニシャライザ。 int x = x;

あなたがそれにxを割り当てるときに、それが使用されているインナー Xのように、それは=の時点で作成されています。それは以前には何も設定されていないので、未定義です。

int x[x];の場合、x;に存在するため、アウターサイズはxです。

8

標準より:3.3.1 [basic.scope.pdecl]

名の宣言の点がすぐに完全な宣言(条項8)の後に、その初期(前であります以下を除く)。ここで、第二x

int x = 12; { int x = x; } 

が独自の(不定)値で初期化される:

標準も、これを明確にする2つの例を有します。

[注:非ローカル名は、非表示のローカル名の宣言ポイントまで表示されます。 [例:

const int i = 2; { int i[i]; } 

は二つの整数のローカル配列を宣言する。 ]]

これらの2つの例は、あなたの質問の2つのケースをカバーしています。

関連する問題