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;
}

总结:

  1. 可以通过直接赋值或列表初始化对结构体赋值。
  2. 使用构造函数可以使代码更清晰。
  3. 动态分配适用于需要灵活管理内存的场景。
  4. C++20 的设计器语法增强了可读性。

 

posted @ 2024-11-23 07:17  海_纳百川  阅读(68)  评论(0编辑  收藏  举报
本站总访问量