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){
    // do something..
  }

直接初始化可以調用顯式的構造函數

複製初始化#

複製初始化使用複製賦值操作符=,於直接初始化不同,它不可以調用顯式的構造函數

int a = 10;
shared_ptr<int> p = new int(10); // 錯誤

列表初始化#

列表初始化是 C++11 之後的新特性,允許使用花括號{}初始化任何類型的變量,它可以防止窄化轉換(即從一種類型隱式轉換為另一種類型而造成的精度丟失等行為: int x {4.2})

MyClass myClass = {1,2,3};
// or
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; // 使用默認構造函數和默認成員初始化器初始化
    // do something ..
}
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。