2016-03-31 15 views
1

私はC++に焦点を当てた非常に初心者のプログラミングコースです。現在、メンバ変数とローカル変数について教えています。そのために、この非常に簡単なプログラムを書いて、ローカル変数が宣言されていて初期化されておらず、があるメンバ変数と同じ名前が与えられたときの出力を確認しました。C++:初期化されていない変数出力はXcodeで0です

class myclass 
{ 
    public: 
     void getvalues(); 
     myclass(); 
    private: 
     int count; 
}; 

myclass::myclass() 
{ 
    count = 100; 
} 

void myclass::getvalues() 
{ 
    int count; 
    std::cout << count << std::endl; 
} 

int main() 
{ 
    myclass foo; 
    foo.getvalues(); 

    return 0; 
} 

非常に大きな乱数の一部が出力されることが予想されます。代わりに、出力は0です。なぜこれが特別な理由ですか?私はこれが違いを生むなら、Xcodeを使っています。

+0

この動作が定義されているとは思いません。あなたはg ++のような他のコンパイラを使ってみたことがありますか?同じ結果が得られたら見てみましょうか? –

+0

なぜそれが0にならないのですか?それは何でも可能ですが、0は何でもあります。 – immibis

答えて

3

これは公式には未定義の動作です。しかし、いくつかの環境はメモリをゼロにします。それ以外の場合は初期化されません。あなたが期待できることの1つは、すべての環境(ビジュアルスタジオ、gccなど)で同じように動作しないことです。

関連する問題