我试图得到一个const int数组的总和作为constexpr,以便我可以使用sum作为另一个数组的大小
constexpr int arr[] = {1,2,3}; constexpr int sum1 = std::accumulate(arr,arr + 3,0); // not OK int arr1[sum1];
上面没有编译,因为std :: accumulate()没有返回constexpr.我最终得到了这样的解决方法
template <size_t N> constexpr int sum(int const a[]) { return a[N-1] + sum<N - 1>(a); } template <> constexpr int sum<0>(int const a[]) { return 0; } constexpr int arr[] = {1,3}; constexpr int sum1 = sum<3>(arr); int arr1[sum1];
有没有更简单的解决方案?
解决方法
从C 14的轻松constexpr你可以做这样的事情:
#include <iostream> constexpr int arr[] = {1,3}; template <size_t Size> constexpr int sum(const int (&arr)[Size]) { int ret = 0; for (int i = 0; i < Size; ++i) ret += arr[i]; return ret; } int main() { int arr1[sum(arr)]; std::cout << sizeof(arr1) / sizeof(int); }
原文地址:https://www.jb51.cc/c/110591.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。