struct A {
int x;
int y;
int z = 123;
};
A a {.x = 1, .z = 2}; // a.x == 1, a.y == 0, a.z == 2
当使用c风格指定初始值时,没有被指定的成员变量将使用默认初始化(default-initialized)。C++11的时候增加了default-initialized概念,数值的默认初始化值被设为0。如:
int i{}; // i 将被初始化为0
int i2; // i2 将被初始化为未知的一个数值
其实designated initializers在C++17以前就实装到编译器了,只是在C++20才明确写入C++标准,类似的情况还有很多。