2010-06-16 29 views

回答

10

Apache Stdcxx项目有a nice table detailing which C++0x features are supported by which compilers。它已经定期更新,涵盖了大多数现代C++编译器。

据此,只有GCC 4.5支持constexpr(请注意,支持可能是实验性的)。

在该列表和评论中所说的内容之间,似乎答案是“否”。

+2

[官方GCC支持表](http://gcc.gnu.org/projects/cxx0x.html)指出'constexpr'完全不受支持。我的代码用'constexpr'编译,但它似乎没有任何效果。我的第一个猜测是关键字被简单地忽略了? – fredoverflow 2010-06-16 14:58:45

+0

@Fred:也许没人支持。不幸的是,我不经常使用gcc来了解它的C++ 0x支持。 – 2010-06-16 15:27:04

+7

刚刚在g ++(GCC)4.6.0 20100605上测试 - 仍然无法创建由constexpr函数返回的大小数组。读取bugzilla,看起来GCC 4.5引入了语法,但不是(但)语义。 – Cubbi 2010-06-16 15:43:36

-3

同意,g ++ 4.5和4.6支持该关键字,但忽略其含义。我刚刚编译(使用-std =的C++ 0x的两个版本)与线一个简单的阶乘程序:

constexpr fact(int i) { return (i>1) ? fact(i-1)*i : 1; } 

,并编译和运行,但检查ASM源(-S选项),当它显示了函数是用参数调用的,而不是由编译器决定的。

+3

答案没有显示你的测试程序是无用的。你的描述听起来像你误解了'constexpr'(并且你显示的函数定义是无效的C++,C++没有“隐式int”)。 – 2011-07-31 17:03:48

4

截至2011年7月,gcc 4.7支持constexpr。你需要从svn构建它。

-9

“constexpr”的使用非常简单。看看这段代码:

constexpr int get_five(){ 
return 5;} 

此函数总是返回5,所以它可以与“constexpr”关键字来声明。 但因子函数根据参数返回值,所以它的“输出”并不总是相同的。

+0

'constexpr int factorial(int n){ return n == 0? 1:n *阶乘(n-1); '是完全有效的。 – 2012-03-21 19:14:13

相关问题