是否有可能初始化未命名结构的std ::数组?

以下工作:

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包含类型说明符seq,因此它不能是类的定义。

你可以使用typedef,但是:

§9.1/ 5一个typedef-name(7.1.3),它命名一个类的类型,或者一个cv限定的版本,也是一个类名。 [...]

我会跟TC的建议一起去:

struct { int v; } foo; std::array<decltype(foo), 10> bar = {{{1},{2}}};
链接地址: http://www.djcxy.com/p/83771.html

上一篇: Is it possible to initialize an std::array of unnamed structs?

下一篇: Thermal imaging palette