gpt4 book ai didi

c++ - 我们可以在 C++14 中省略 std::array 的双括号吗?

转载 作者:太空狗 更新时间:2023-10-29 23:12:13 24 4
gpt4 key购买 nike

我现在正在阅读 C++14 的标准草案,也许我的法律术语有点生疏,但我找不到任何提及允许像下面这样的初始化

std::array<int, 3> arr{1,2,3};

合法。 (编辑:显然以上是 C++11 中的合法语法。)目前在 C++11 中我们必须将 std::array 初始化为

std::array<int, 3> arr{{1,2,3}}; // uniform initialization + aggregate initialization

std::array<int, 3> arr = {1,2,3};

我好像听说他们在 C++14 中放宽了规则,这样我们在使用统一初始化时就不必使用双括号方法了,但我找不到实际的证据。

注意:我关心这个的原因是因为我目前正在开发一个 multi_array - 类型并且不想像这样初始化它

multi_array<int, 2, 2> matrix = {
{{ 1, 2 }}, {{ 3, 4 }}
};

最佳答案

实际上你也可以在 C++11 中编写以下内容:

std::array<int, 3> arr{1,2,3};

这是完全有效的语法。

在 C++11 中允许的是类似 this 的东西case (请参阅该主题;我不想在这里再次写这个,这是一篇很长的文章)。所以如果你这么问,是的,我们可以在 C++14 中省略额外的大括号。这是提案:

  • Uniform initialization for arrays and class aggregate types

  • 介绍说

    This document proposes a slight relaxation of the rules for eliding braces from aggregate initialization in order to make initialization of arrays and class aggregates more uniform. This change is required in order to support class aggregate types with a single member subaggregate that behave similarly to their array counterparts (i.e. std::array).

希望对您有所帮助。

关于c++ - 我们可以在 C++14 中省略 std::array 的双括号吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48063883/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com