2016-04-28 13 views
-1
ここ
#include <iostream> 

using namespace std; 

class Foo 
{ 
public: 
     int a; 
}; 
int main() 
{ 
     Foo f; 
     Foo f1(f); 
     cout<<f.a; 
     return 0; 
} 

FAプリントガベージ値を初期化しませんが、我々はf1.aを追加するときにFAとf1.aの両方が何を理解するために私を助けてください0コピーコンストラクタは、プリミティブデータ型

#include <iostream> 

using namespace std; 

class Foo 
{ 
public: 
     int a; 
}; 
int main() 
{ 
     Foo f; 
     Foo f1(f); 
     cout<<f.a<<f.b; 
     return 0; 
} 

で初期化されますこれの背後にある理由です。

+1

2番目の例はコンパイルされません。実際のコードを表示してください。 – MSalters

答えて

3

初期化されていない変数には、不確定な値、つまりそのメモリ内にあったものがあります。 0は、可能な不確定値の1つであり、他の値でもあります。

0

コピーc-torは、明示的に宣言していない限り、プリミティブデータ型を初期化しません。 初期化されていない変数の値は、この変数に属するRAM領域の値によって決まるため、何でも構いません。しかし、このラムは0に設定されている可能性が高いです(コンピュータの再起動後)。

+0

再起動のためではありません。 OSがメモリをプロセスに割り当てるときはいつでも、この物理メモリを使用していた他のプロセスからの機密情報が漏れないように、それを '0'で埋める必要があります。 –