【C++11】之列表初始化

目录

记得点赞!!!

1.1 概述 C++98 中的列表初始化

1.2 扩展:C++11 中的统一列表初始化

2. 统一的列表初始化

2.1 使用花括号 {} 进行初始化

2.1.1 列表初始化数组和结构体元素

2.1.2 列表初始化对象和创建对象时的构造函数调用

2.2 std::initializer_list

2.2.1 简介和使用场景

2.2.2 在容器对象中的应用

2.2.3 使用 initializer_list 作为构造函数和 operator= 的参数

结语


1.1 概述 C++98 中的列表初始化

在 C++98 中,列表初始化是通过使用花括号 {} 对数组或结构体元素进行初始化的一种语法。这种语法的引入使得初始化操作更为统一,并提供了一种清晰而简洁的方式。然而,在 C++98 中,这种初始化方式的适用范围相对有限,仅限于数组和结构体。

1.2 扩展:C++11 中的统一列表初始化

随着 C++11 标准的引入,列表初始化得到了进一步扩展,使其适用于所有的内置类型和用户自定义类型。不仅包括了数组和结构体的初始化,还可以在对象的创建时使用列表初始化,而且可以选择是否添加等号(=)。这一扩展为 C++ 中的初始化操作带来了更大的灵活性和表达力。

2. 统一的列表初始化

2.1 使用花括号 {} 进行初始化
2.1.1 列表初始化数组和结构体元素
int array1[] = { 1, 2, 3, 4, 5 };
int array2[5] = { 0 };
struct Point {
    int _x;
    int _y;
};
Point p = { 1, 2 };

在上述示例中,array1array2 分别展示了列表初始化数组的两种方式,同时结构体 Point 的对象 p 也通过花括号进行了初始化。

2.1.2 列表初始化对象和创建对象时的构造函数调用
int x1 = 1;
int x2{ 2 };
int array1[]{ 1, 2, 3, 4, 5 };
int array2[5]{ 0 };
Point p{ 1, 2 };

上述代码中展示了不同类型的对象如何使用统一的列表初始化方式。值得注意的是,C++11 中的列表初始化也可以用于 new 表达式,如下所示:

int* pa = new int[4]{ 0 };

2.2 std::initializer_list

2.2.1 简介和使用场景

std::initializer_list 是 C++11 引入的一种用于表示初始化列表的标准库类型。它的主要作用是作为构造函数的参数,方便地进行初始化操作。

2.2.2 在容器对象中的应用
vector<int> v = { 1, 2, 3, 4 };
list<int> lt = { 1, 2 };
map<string, string> dict = { {"sort", "排序"}, {"insert", "插入"} };

上述示例展示了在不同容器对象中使用 std::initializer_list 进行初始化,使得容器对象的初始化更为方便和直观。

2.2.3 使用 initializer_list 作为构造函数和 operator= 的参数
class Date {
public:
    Date(int year, int month, int day)
        : _year(year), _month(month), _day(day) {
        cout << "Date(int year, int month, int day)" << endl;
    }
private:
    int _year;
    int _month;
    int _day;
};

int main() {
    Date d1(2022, 1, 1);  // 旧的初始化方式
    Date d2{ 2022, 1, 2 };  // C++11支持的列表初始化,调用构造函数初始化
    Date d3 = { 2022, 1, 3 };
    return 0;
}

上述代码展示了在类的构造函数中使用 std::initializer_list 进行初始化,从而实现更为灵活的对象初始化操作。此外,initializer_list 也可以作为 operator= 的参数,实现对象的赋值操作。

结语

通过统一列表初始化和 std::initializer_list 的引入,C++11在初始化方面提供了更为一致、灵活和方便的语法,为代码编写和维护带来了显著的便利。在实际应用中,开发者可以更加自由地选择合适的初始化方式,提高代码的可读性和可维护性。

  • 29
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值