推荐答案
在C++20中,指定初始化器(designated initializer)允许你在初始化结构体或类的对象时,通过指定成员名称来初始化特定的成员。这种方式可以提高代码的可读性,并且允许你只初始化部分成员。
// www.javascriptcn.com code example
#include <iostream>
struct Point {
int x;
int y;
int z;
};
int main() {
Point p1 = { .x = 10, .y = 20 }; // 只初始化x和y,z将被默认初始化
Point p2 = { .y = 30, .z = 40 }; // 只初始化y和z,x将被默认初始化
std::cout << "p1: (" << p1.x << ", " << p1.y << ", " << p1.z << ")\n";
std::cout << "p2: (" << p2.x << ", " << p2.y << ", " << p2.z << ")\n";
return 0;
}本题详细解读
1. 指定初始化器的基本用法
指定初始化器允许你在初始化结构体或类的对象时,通过指定成员名称来初始化特定的成员。这种方式可以避免初始化顺序的错误,并且可以只初始化部分成员。
2. 语法规则
- 使用
.成员名 = 值的形式来指定初始化某个成员。 - 未指定的成员将被默认初始化(对于基本类型,通常是零初始化)。
- 指定初始化器的顺序不需要与结构体或类中成员的声明顺序一致。
3. 适用场景
- 当结构体或类有很多成员,但你只想初始化其中一部分时。
- 当你希望代码更具可读性,明确指定每个成员的初始化值时。
4. 注意事项
- 指定初始化器是C++20引入的新特性,因此在C++20之前的版本中无法使用。
- 指定初始化器不能用于数组的初始化。
5. 示例代码解析
在示例代码中,Point 结构体有三个成员:x、y 和 z。通过指定初始化器,我们可以选择性地初始化 x 和 y,或者 y 和 z,而未指定的成员将被默认初始化。
Point p1 = { .x = 10, .y = 20 }; // 只初始化x和y,z将被默认初始化
Point p2 = { .y = 30, .z = 40 }; // 只初始化y和z,x将被默认初始化输出结果为:
p1: (10, 20, 0) p2: (0, 30, 40)
可以看到,未指定的成员被默认初始化为0。