我可以用constexpr函数声明一个静态数组吗

时间:2018-08-08 08:25:48

标签: c++ c++11 constexpr

// since we can dedfine a static array like this
int a[5] = {0};
// decltype(a[5]) is `int [5]`

// Then how about this way?
constexpr int sum(int a, int b) { return a + b; }
int a, b;
std::cin >> a >> b;
int arr[sum(a, b)] = {0};

它可以成功编译,但是arr是静态数组吗? 当我尝试使用arrtypeid().name()打印boost::typeindex::type_id_with_cvr类型时,出现以下错误:

error: cannot create type information for type 'int [(<anonymous> + 1)]' because it involves types of variable size
 std::cout << typeid(decltype(arr)).name() << std::endl;

1 个答案:

答案 0 :(得分:6)

由于ab的值在编译时未知,因此sum的结果不是constexpr。

代码可能会编译,因为您正在使用GCC,它具有一个扩展名,该扩展名允许在堆栈上以可变大小声明数组,标准c ++不允许这样做。