c – 数组元素的总和为constexpr
发布时间:2020-12-16 03:41:35 所属栏目:百科 来源:网络整理
导读:我试图得到一个const int数组的总和作为constexpr,以便我可以使用sum作为另一个数组的大小 constexpr int arr[] = {1,2,3};constexpr int sum1 = std::accumulate(arr,arr + 3,0); // not OKint arr1[sum1]; 上面没有编译,因为std :: accumulate()没有返回co
我试图得到一个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); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |