我不是在谈论std::array
或其他任何东西,只是经典的香草C / C ++数组。我了解ARRAY_SIZE
/ _countof
可以实施的各种方式,我只是想知道他们是否设法为此标准化了一个名称({{{{{{{{{{{{{{{{{{ 1}}我假设)。如果不是有提案吗?
答案 0 :(得分:9)
std :: extent - 数组的大小
如果您使用的是原生数组,可以使用<type_traits>
中的std::extent
,int a1[1024];
int a2[std::extent<decltype(a1)>::value]; // int[1024]
用于生成数组 Nth 维度中的元素数量(默认值)到第一个)。
int a1[1024];
auto n = std::distance (std::begin (a1), std::end (a1)); // 1024
一点间接(通用解决方案,而不仅仅是数组)
没有一个名称可以替代您所描述的内容,但由于 C ++ 11 ,可以使用std::begin
和std::end
来为合适的实体获取迭代器,并与std::distance
一起使用“极好”的方法来获得具有合适品质的东西。
std::distance
上述解决方案的缺点是C ++ 11中三个函数都不是 constexpr ,即使在C ++ 14中std::end (e) - std::begin(e)
仍然不是 constexpr (另外两个是)。
这意味着该解决方案不能用于需要常量表达式的上下文中。
如果您确定使用的是提供 RandomAccessIterators 的实体,则解决方法的一种解决方法是使用std::size
如果常量表达式是必需的( C ++ 14 )。
N4280建议我们将int a1[1024];
auto n = std::size (a1);
添加到标准库中,实际上正是您所寻找的。 p>
{{1}}
如果一切按计划进行,我们将在 C ++ 17 中使用它。