C/C++初期化のいくつかの方式

1317 ワード

デフォルト初期化
int *pi = new int;//デフォルトの初期化は、基本的な組み込みタイプを初期化しないのでpiは初期化されていないintを指します.
string *ps=new string;//デフォルトは空のstringに初期化されます
デフォルトの初期化規則:
1内蔵タイプで、初期化が表示されていない場合は、値は定義された位置によって決まります. 
1)任意の関数以外の変数を0に初期化する
2)関数内に定義されている組み込み型変数は初期化されません
2クラスタイプ、それぞれのイニシャルオブジェクトを決定する方法
関数の外部(グローバル変数)、関数の内部では、クラスのコンストラクション関数が初期化されます.
二直接初期化方式(従来のカッコ()またはc++11で導入された{}を使用することができ、すなわちリストを使用して初期化することができる
string s(“123”)//直接初期化
string s=“123”//コピー初期化.コンパイラは、等号の右側の初期値を新規作成オブジェクトにコピーします.
string s 8=string('c',8)/コピー初期化
に等しい
string temp = string('c',8)
string s8 = temp
に等しい
string s 8('c',8)/直接初期化
3値初期化(タイプ名の後ろにカッコ()を付けるだけ)
string *ps= new string();//値を空白列に初期化
string *ps2 = new string;//空白列に直接初期化
int *pi1 = new int();//値を0に初期化
int *pi2= new int;//値を「未定義」に初期化
1組み込みタイプを0に初期化
2クラスタイプ、コンストラクション関数の呼び出し
コードg+/vs 2010の実行結果の比較
#include #include using namespace std; int main() {         int i;         int *pi = new int;         int *pi2 = new int();         int *pi3 = new int(1);         cout< }
g++コンパイラ:
root@ubuntu:~/c11# ./a.out     
 *pi:0i:-1074971288*pi2:0*pi3:1

vs 2010コンパイラ:
iがローカル変数を初期化していないことを確認し、警告をコンパイルし、実行時にエラーが発生したことを確認できます.i=3を変更した後も、*piは未定義の値です.