📜  c++ 20 结构初始化 - C++ (1)

📅  最后修改于: 2023-12-03 14:39:49.335000             🧑  作者: Mango

C++ 20 结构初始化

在 C++ 20 中,我们可以使用更加简洁的方式对结构体进行初始化。这种新的初始化方式使得代码更加清晰易读,同时也减少了代码的冗余。

传统结构初始化方法

在 C++ 20 之前,我们初始化一个结构体通常需要写出所有成员的名称,并且要按照预定义的顺序进行初始化:

struct MyClass {
  int a;
  const char* b;
  float c;
};

// 传统方法初始化
MyClass obj = { 10, "hello", 3.14f };

这种方式虽然简单,但是当结构体具有大量成员时,初始化代码就会变得非常冗长。

新的结构初始化方法

在 C++ 20 中,我们可以使用新的结构初始化方法,它可以轻松地将成员名称和值对应起来,使得代码更加简洁:

struct MyClass {
  int a;
  const char* b;
  float c;
};

// 新方法初始化
MyClass obj = {
  .a = 10,
  .b = "hello",
  .c = 3.14f
};

上面的代码中,我们可以将成员名称放置于花括号中,并用等号将其与相应的值分隔开来。这种方式可以使得代码更加易读,并且在结构体有许多成员时可以更直观地表现出每个成员的作用。

默认成员初始化

新的结构初始化方法还支持默认成员初始化,这意味着我们可以设置一些默认值,并在实例化时只覆盖需要更改的成员:

struct MyClass {
  int a = 0;
  const char* b = "";
  float c = 0.0f;
};

MyClass obj = {
  .a = 10
};

上面的代码中,我们可以看到 a 的值被设置为 10,同时 bc 的值会被默认初始化为 ""0.0f

总结

C++ 20 的结构体初始化方法使得初始化代码更加简洁易读,并支持默认成员初始化。我们可以使用花括号将成员名称与其值一一对应,从而更好地表现出每个成员的作用,同时也可以减少代码冗余。