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 ..
}
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。