C++中的结构体初始化的多种方式
在 C++ 中,结构体(struct
)是用于组合多个变量(可以是不同类型)的数据类型。以下是创建结构体并赋值的基本方法:
1. 定义结构体并赋值
示例代码:
#include <iostream>
#include <string>
using namespace std;
// 定义结构体
struct Person {
string name;
int age;
float height;
};
int main() {
// 初始化并赋值方式 1:列表初始化
Person person1 = {"Alice", 25, 5.6};
// 初始化并赋值方式 2:分步赋值
Person person2;
person2.name = "Bob";
person2.age = 30;
person2.height = 6.0;
// 输出结果
cout << "Person 1: " << person1.name << ", " << person1.age << " years old, " << person1.height << " ft" << endl;
cout << "Person 2: " << person2.name << ", " << person2.age << " years old, " << person2.height << " ft" << endl;
return 0;
}
2. 用构造函数赋值(C++11 起支持)
在 C++ 中,结构体可以像类一样定义构造函数,用来更方便地初始化。
示例代码:
#include <iostream>
#include <string>
using namespace std;
// 定义结构体
struct Person {
string name;
int age;
float height;
// 构造函数
Person(string n, int a, float h) : name(n), age(a), height(h) {}
};
int main() {
// 使用构造函数初始化
Person person1("Charlie", 28, 5.9);
// 输出结果
cout << "Person: " << person1.name << ", " << person1.age << " years old, " << person1.height << " ft" << endl;
return 0;
}
3. 动态分配结构体
如果需要在堆上动态分配结构体,可以使用 new
关键字。
示例代码:
#include <iostream>
#include <string>
using namespace std;
// 定义结构体
struct Person {
string name;
int age;
float height;
};
int main() {
// 动态分配
Person* person = new Person{"Daisy", 22, 5.7};
// 输出结果
cout << "Person: " << person->name << ", " << person->age << " years old, " << person->height << " ft" << endl;
// 释放内存
delete person;
return 0;
}
4. C++20 起支持聚合初始化增强
在 C++20 中,可以使用设计器语法(designated initializers
)来更明确地初始化结构体的成员。
示例代码:
#include <iostream>
#include <string>
using namespace std;
// 定义结构体
struct Person {
string name;
int age;
float height;
};
int main() {
// 使用 C++20 的设计器语法
Person person1 = {.name = "Eve", .age = 26, .height = 5.8};
// 输出结果
cout << "Person: " << person1.name << ", " << person1.age << " years old, " << person1.height << " ft" << endl;
return 0;
}
总结:
- 可以通过直接赋值或列表初始化对结构体赋值。
- 使用构造函数可以使代码更清晰。
- 动态分配适用于需要灵活管理内存的场景。
- C++20 的设计器语法增强了可读性。
本文来自博客园,作者:海_纳百川,转载请注明原文链接:https://www.cnblogs.com/chentiao/p/18564015,如有侵权联系删除