首页 > 解决方案 > 获取 std::array 的 constexpr 初始化成员的数量

问题描述

我在编译时使用初始化列表初始化 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.

标签: c++c++14

解决方案


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

在 C++17 中,你会做

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

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

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


推荐阅读