banner
Matrix

Matrix

Abyss
email
github

Petty C++ の初期化

C++ では、初期化子(initializers)は変数やオブジェクトの初期状態を設定する式の一種であり、オブジェクトの作成、メンバの初期化、配列の代入などのコンテキストでよく使用されます。

ダイレクト初期化#

ダイレクト初期化では、()または{}を使用して変数を初期化できます:

int a(10);
int b{10};

// メンバの初期化式リストは、ダイレクト初期化の一種です
  MyClass(int a, int b): x(a), y(b){
    // 何かを行う..
  }

ダイレクト初期化では、明示的なコンストラクタを呼び出すことができます

コピー初期化#

コピー初期化はコピー代入演算子=を使用し、ダイレクト初期化とは異なり、明示的なコンストラクタを呼び出すことはできません

int a = 10;
shared_ptr<int> p = new int(10); // エラー

リスト初期化#

リスト初期化は C++11 以降の新機能であり、波括弧{}を使用して任意の型の変数を初期化できます。これにより、縮小変換(つまり、一種の型から別の型への暗黙の変換による精度の損失など)を防ぐことができます: int x {4.2}

MyClass myClass = {1,2,3};
// または
MyClass myClass = new MyClass{1,2,3};
std::vector<int> v = {1,2,3};

集約 (struct) 初期化#

集約は、ユーザー定義のコンストラクタがなく、プライベートまたは保護された非静的データメンバーがなく、基底クラスがなく、仮想関数がないクラスまたは構造体の一種です

集約型では、波括弧を使用してメンバーを初期化できます。例:

struct Point {int x; int y;}; 
Point p = {1, 2};

デフォルトメンバー初期化子#

デフォルトメンバー初期化子は C++11 で導入された新機能であり、クラス定義内でメンバー変数にデフォルトの値を直接指定できます

class MyClass{
  int x = 4;
  int y = 2;
  public:
    MyClass() = default; // デフォルトコンストラクタとデフォルトメンバー初期化子を使用して初期化
    // 何かを行う..
}
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。