标准::数组<T>初始化

std::array<T> initialization

本文关键字:gt 初始化 lt 数组 标准      更新时间:2023-10-16

std::array<T>本质上是一个封装在struct中的C样式数组。structs的初始化需要大括号,数组的初始化也需要大括号。所以我需要两副背带:

std::array<int, 5> a = {{1, 2, 3, 4, 5}};

但我看到的大多数示例代码只使用了一对大括号:

std::array<int, 5> b = {1, 2, 3, 4, 5};

为什么允许这样做?与第一种方法相比,它有什么好处或缺点吗?

好处是您可以。。。较少输入。但缺点是,只有当声明具有该形式时,才允许省略大括号。如果省略=,或者如果数组是成员并使用member{{1, 2, 3, 4, 5}}初始化它,则不能只传递一对大括号。

这是因为在f({{1, 2, 3, 4, 5}})中,当大括号被传递给函数时,人们担心可能会出现过载歧义。但它引起了一些讨论,并产生了一份问题报告。

本质上,= { ... }初始化总是能够省略大括号,就像中一样

int a[][2] = { 1, 2, 3, 4 };

这不是什么新鲜事。新的是,您可以省略=,但必须指定所有大括号

int a[][2]{ {1, 2}, {3, 4} };