簡體   English   中英

是否可以初始化未命名結構的std ::數組?

[英]Is it possible to initialize an std::array of unnamed structs?

以下作品:

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

我可以做同樣的事情,而是初始化一個std::array嗎?

編輯,因為很多人都在問'為什么'

有一些非常明顯的解決方法(在評論中列出),但我只想使用一次類型,所以我真的不希望它添加到我當前的命名空間。 我可以使用元組或類似的東西,但具有命名值可以提高清晰度。 如果我構建一個std::array ,我不需要c-array值,所以我不能使用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-name (7.1.3)也是類名 [...]

我會贊同TC的建議:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM