使用初始化器列表初始化容器时,一可能已经注意到 std::vector 和 std::array 之间的语法差异。 std::vector 使用单花括号 {} 进行初始化,而 std::array 则需要双花括号 {{}}。为了理解为什么存在这种区别,我们深入研究这些容器的基本属性。
与 std::vector 不同, std::array 具有用户定义的构造函数,被视为聚合类型。这意味着它缺少用户声明的构造函数,包括那些接受初始值设定项列表的构造函数。因此,std::array 的初始化依赖于聚合初始化,这是从 C 继承的 C 功能。
C 中,聚合初始化可以通过两种方式执行:
使用旧样式,在声明中初始化时可以省略额外的大括号。但是,此选项不适用于直接列表初始化。
CWG 缺陷 #1270 试图解决此限制,允许在其他中省略大括号列表初始化的形式。如果获得批准,以下语法将变得有效:
std::array
此更改将消除 std::vector 和 std::array 之间当前的语法差异,从而提供聚合初始化实践的一致性。
以上是为什么 `std::vector` 和 `std::array` 对初始值设定项列表使用不同的语法?的详细内容。更多信息请关注PHP中文网其他相关文章!