隐含的constexpr?

Arb*_*est 7 c++ constexpr c++11

C++ 11编译器(以及他们)是否注意到一个函数是constexpr并且即使它们未被声明为constexpr也会将它们视为这样?

我正在使用维基百科中的示例向使用constexpr的人展示:

int get_five() {return 5;}

int some_value[get_five() + 7]; // Create an array of 12 integers. Ill-formed C++
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是编译器没问题.所以,我进一步更改了get_five()以获取一些int参数,将它们相乘并返回结果,同时仍未明确声明为constexpr.编译器也可以.似乎如果编译器可以做到这一点,那么为了明确声明constexpr的某些东西,没有太多的意义.

Jer*_*fin 6

在功能正常的C++ 11编译器上,您的代码将被拒绝.

基于它的被接受,你几乎肯定使用gcc(或一些非常接近模仿它的bug).gcc [在某种程度上取决于标志]可以接受任何度量不是常量的数组大小(例如,取决于用户的运行时输入),因为它们支持C++中C99可变长度数组的模拟.