是否可以初始化未命名结构的std :: array?

罗莉

下面的作品:

struct
{
    int v;
} vals[] = { {1}, {2} };

我可以做同样的事情,而是初始化一个std::array吗?

进行编辑,因为有很多人问“为什么”

有一些非常明显的解决方法(在注释中列出),但是我只想使用一次该类型,所以我真的不希望将它添加到当前的名称空间中。我可以使用元组或类似的东西,但是使用命名值可以提高清晰度。如果我正在构建std::array则不需要c数组值,因此不能使用decltype。

想做的最干净的解决方案是:

struct
{
    int v;
} std::array vals = { {1}, {2} };

学术兴趣也有一个要素-“这是否可能以某种我没有的方式呢?”。似乎没有,所以我可能会使用:

struct
{
    int v;
} c_array[] = {};

std::array<std::remove_reference_t<decltype(c_array[0])>, 2> arr = { {1}, {2} };
用户名

您无法执行的原因:

std::array<struct {int v}, 10> arr;

是由于N4140遵循以下规则:

§7.1.6/ 3 [...] type-specifier-seq不应定义类或枚举,除非它出现在不是模板声明别名声明(7.1.3)type-id-声明

由于模板类型参数是使用type-id指定的,并且type-id包含type-specifier-seq,因此它不能是类的定义。

您可以使用typedef,但是:

§9.1/ 5命名类类型或其cv限定版本typedef名称(7.1.3)也是类名称[...]

我会同意TC的建议

struct { int v; } foo; std::array<decltype(foo), 10> bar = {{{1},{2}}};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否可以在构造函数的初始化程序列表中初始化std :: unique_ptr的std :: array?

在C ++ 11中初始化结构的C ++ std :: array

std::array 结构初始化器列表语法

是否可以以编程方式初始化constexpr std :: array成员

使用初始化列表初始化结构,对于 std::array 失败

初始化std :: array <>

初始化std :: array的std :: array

std :: array是否默认初始化或值初始化?

是否可以使用命名列和未命名列初始化数据框?

默认初始化std :: array?

std :: array的嵌套聚合初始化

值初始化std :: array成员?

用'this'指针初始化std :: array

在函数内部初始化std :: array

初始化std :: array <struct,size>

如何使用可变长度序列容器的内容初始化结构内部的std :: array字段?

如何声明用不同值内联初始化的结构的std :: array

可以使用右值初始化 const std::array 成员引用吗?

C ++类可以在头文件中包含内联初始化的静态const std :: array吗?

可以使用重复的函数调用来初始化const std :: array吗?

遍历在for循环中初始化的std :: array是否是未定义的行为?

作为类成员的std :: array <int,N>中的元素是否默认初始化

为什么不能使用嵌套的初始化程序列表初始化std :: array <std :: pair <int,int>,3>,但是std :: vector <std :: pair <int,int >>可以初始化?

使用std :: vector进行std :: array初始化

为什么C ++会用零初始化std :: vector而不初始化std :: array?

用常量值初始化std :: array

使用 constexpr 初始化 std.array 中的对象

从C数组初始化std :: array的正确方法

通过参数包从任意索引初始化std :: array