#include <stdio.h>
#include <iostream>
using namespace std;
template <typename T, int N>
int ReturnArraySize(T (&arg1)[N]) {
return N;
}
constexpr int ReturnTheSum(int arg1, int arg2) {
return arg1 + arg2;
}
int main(int argc, char **argv)
{
int arr1[20];
int arr2[ReturnArraySize(arr1)];
int arr3[ReturnTheSum(ReturnArraySize(arr1), ReturnArraySize(arr2))];
return 0;
}
当我编译代码时,出现以下错误:
/root/Documents/C++11_Fundamentals/ConstExprRelatedFunc/main.cpp:19:67: error: no matching function for call to '
ReturnArraySize(int [(<anonymous> + 1)])
'
最佳答案
因为 ReturnArraySize
没有被标记为 constexpr
函数,arr2
变成了一个 VLA( variable-length array ,一个 GCC 扩展,不是C++ 标准),无法在编译时查询其大小(即,由函数模板推导)。
您可以通过将 ReturnArraySize
设为 constexpr
来解决此问题:
template <typename T, int N>
constexpr int ReturnArraySize(T (&arg1)[N]) {
//~~~~~~^
return N;
}
关于c++ - 使用 constexpr 时出现编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36337797/