获取std :: array

时间:2019-03-15 20:08:20

标签: c++ c++14

我在编译时使用一个初始化列表初始化一个std :: array,我想有一种存储元素数量的方法。 std::array::size()将返回整个数组的大小,这不是我想要的。

如何改善以下代码?非常感谢!

#include <array>

constexpr std::array<int, 5> a{{1, 2, 3}};

constexpr size_t element_count(const std::array<int, 5> &a) { return ???; }

int main() { static_assert(element_count(a) == 3); }

我正在使用g++ (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0进行编译。

2 个答案:

答案 0 :(得分:2)

在C ++ 14中,没有办法很好地做到这一点。数组的类型在其声明中是固定的,无论实际初始化为非零值的元素数量如何,它都保持不变。

在C ++ 17中,您只需

std::array arr{1, 2, 3, 4};

但是在C ++ 14中,您必须使用auto变量和make_array类型的函数。如果您愿意,我可以显示示例代码。

P.S。事实上,std::array缺少自动减少数组长度的原因是我在某些代码中使用C样式数组的唯一原因。

答案 1 :(得分:0)

我发现了一种可能的解决方法,方法是使用指向初始化列表的指针begin,并在编译时询问其大小:constexpr array and std::initializer_list。这段代码是在上述编译器上编译的,我可以在运行时使用size()和operator []从数组中获取信息。