c++ - 获取 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++14 中没有办法很好地做到这一点。数组的类型在其声明中是固定的,无论实际初始化为非零值的元素数量如何,它都保持不变。
在 C++17 中,你会做
std::array arr{1, 2, 3, 4};
但在 C++14 中,您必须使用auto
变量和make_array
函数类型。如果你愿意,我可以展示示例代码。
PS 事实上,缺少自动数组长度推导std::array
是我在某些代码中使用 C 样式数组的唯一原因。
推荐阅读
- node.js - Node.js verify.verify() 奇怪的行为
- python - 如何使用python在网络浏览器中打开选项卡
- sql - 从另一个表中获取丢失的数据
- python - 所以我必须写下一个返回形状的函数
- pdf - 修复页面底部页脚QWEB Invoice Report ODOO前的一个元素“DIV”
- php - 使用代码 eval("\$name= \"$input\";") 获取用户数据是否安全,其中 $input 从用户那里获取?
- php - 带有 ajax 的 CRUD SonataAdmin 在迁移之前不起作用
- cloudinary - Cloudinary 卡在 Displacement 上
- github - 在 GitHub 世界中,存储库的容器叫什么?
- sql - createQueryBuilder 和 setParameters() 为同一个参数多个值