C++デフォルト初期化と値初期化

2780 ワード

文書ディレクトリ
  • 前提知識
  • 変数およびオブジェクト
  • 初期化
  • デフォルト初期化
  • 値初期化
  • 値初期化が現れる場合
  • 前提知識
    変数とオブジェクト
    変数は、プログラム操作可能な名前のストレージスペースを提供します.C++の各変数にはデータ型があり、データ型は変数が占めるメモリ空間の大きさとレイアウト、その空間が格納できる値の範囲、および変数が関与する演算を決定します.C++では、変数とオブジェクトは一般的に相互に使用できます.
    初期化
    オブジェクトが作成されると、特定の値が得られ、このオブジェクトが初期化されたと言います.C++言語での初期化と付与は、まったく異なる2つの操作であることに注意してください.初期化は付与ではなく、初期化の意味は変数を作成するときに初期値を付与し、付与の意味はオブジェクト(変数)の現在値を消去し、新しい値に置き換えます.
    デフォルト初期化
    変数を定義するときに初期値が指定されていない場合、変数はデフォルトで初期化され、変数に「新しいデフォルト値」が付与されます.デフォルト値の内容は変数のタイプによって決まり、変数の位置を定義することも影響します(クラスタイプ、ブロック役割ドメイン、グローバルなど).組み込み型の変数が明示的に初期化されていない場合、その値は定義された位置によって決まります.任意の関数体以外に定義された変数は0に初期化されます.例外として,関数内で定義された局所静的変数は,一度だけ初期化され,呼び出し終了後も値が有効である.
    初期化されていない組み込み型変数の値は定義されていません.コピーまたは他の形式でアクセスしようとすると、エラーが発生します.
    配列の場合、配列は関数内で定義され、要素はデフォルトの初期化を実行します.
    #include 
    using std::cout; using std::endl;
    int main()
    {
    	int val;
    	int arr[12];
    	cout << val << endl; //  ,            
    	cout << arr[2] << endl; //         
    
    	return 0;
    }
    

    値の初期化
    変数を数値で初期化し、初期値が指定されていない場合は、変数またはクラスオブジェクトのタイプに応じて初期値を指定します.intタイプの値は初期化後の値が0です.
    値初期化が発生した場合
  • 配列の初期化中に提供される初期値の数は、配列のサイズよりも少ない.
  • 初期値を使用してローカル静的変数を定義しない場合
  • T()のような表現を書くことによって値の初期化を明示的に要求すると、Tはタイプ名(vectorの構造関数はvectorサイズを説明するために1つの実パラメータしか受け入れられず、「C++primer」p 88を参照)であり、このような形式の実パラメータを使用して要素初期化器の値を初期化する.

  • 文章は更新を続けます....