【发布时间】:2013-03-22 21:41:55
【问题描述】:
C++11 编译器(他们是否)能注意到一个函数是一个 constexpr 并且即使它们没有被声明为 constexpr 也可以这样对待它们吗?
我正在使用直接来自 Wikipedia 的示例向某人演示 constexpr 的用法:
int get_five() {return 5;}
int some_value[get_five() + 7]; // Create an array of 12 integers. Ill-formed C++
令我惊讶的是,编译器可以接受它。因此,我进一步更改了 get_five() 以获取一些 int 参数,将它们相乘并返回结果,同时仍然没有被显式声明为 constexpr。编译器也可以。似乎如果编译器可以做到这一点,那么为了显式声明某些东西constexpr 所需的限制就没有多大意义了。
【问题讨论】:
-
也许你的编译器支持 VLA 作为扩展。你考虑过吗?
-
那是什么编译器?
-
我正在使用我通过 MinGW-4.6.1 使用 g++,但也使用 -std=c++0x 和 -pedantic 开关。根据下面 JC 的回答,我目前正在考虑安装 Clang。 @Bo - 我说的是 constexpr 关键字,它(应该是)在上面的 get_five( ) 声明中是必需的。
-
@Arbalest - 据我所知,没有隐含的 constexpr,但正如 Jerry Coffin 在 g++ 以下的回答(取决于确切的选项集)可能允许在 C++ 中使用一些 C99 功能。跨度>