gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 22:37:33 26 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案例(看那个话题;我不想在这里再写这个,这是一篇很长的文章)。所以如果你问这个,是的,我们可以省略 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/18792731/

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