为什么MSVC++ 11拒绝对函数进行constexpr限定?

JBL*_*JBL 38 c++ constexpr c++11 visual-studio-2012

因此,使用constexpr,MSVC(Visual Studio 2012)在尝试constexpr使用此简单程序(包括省略)使用关键字限定我的函数时给了我一个错误:

constexpr int factorial(int n)
{
    return n <= 1 ? 1 : (n * factorial(n-1));
}

int main(void)
{
    const int fact_three = factorial(3);
    std::cout << fact_three << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

constexpr 带有以下消息的红色下划线:

错误:此声明没有存储类或类型说明符

并尝试编译该程序给出了以下输出:

1> main.cpp(5):错误C2144:语法错误:'int'前面应加';'

1> main.cpp(5):错误C4430:缺少类型说明符 - 假定为int.注意:C++不支持default-int

它真的让我感到困惑,因为它是Cppreference 用来说明其使用constexpr的一个例子.起初我使用了一个返回文字的简单函数,即constexpr int func(){return 5;}但产生了同样的错误.我将第一条消息解释为"它应该是结构或类的成员函数",但Cppreference的示例显示它显然不是必需的.

那么,我在这里明显缺少什么?

Cho*_*ett 38

很简单 - 因为Visual Studio不支持constexpr(在Visual Studio 2015之前).

请注意,MSVC++ 11是Visual Studio 2012; VC++ 10是Visual Studio 2010.

  • 只是一个小注释:答案中的链接仍然说MSVC不支持`constexpr`,但自[Visual C++编译器2013年11月CTP]以来(http://blogs.msdn.com/b/vcblog/archive/) 2013/11/18/announcing-the-visual-c-compiler-november-2013-ctp.aspx),MSVC++ 12现在部分支持它(成员函数仍然不支持). (3认同)