39

因此,使用 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;
}

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

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

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

1>main.cpp(5): 错误 C2144: 语法错误: 'int' 应该以 ';' 开头

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

这真的让我很困惑,因为它正是 Cppreference用来说明constexpr. 起初,我使用了一个简单的函数,它返回一个文字 ie constexpr int func(){return 5;},但它产生了同样的错误。我将第一条消息解释为“它应该是结构或类的成员函数”,但来自 Cppreference 的示例表明它显然没有必要。

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

4

1 回答 1

39

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

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

于 2013-08-29T14:26:29.283 回答