因此,使用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&gt; main.cpp(5):错误C2144:语法错误:'int'前面应加';'
1&gt; main.cpp(5):错误C4430:缺少类型说明符 - 假定为int。注意:C ++不支持default-int
它真的让我感到困惑,因为它是Cppreference uses to illustrate the use of constexpr
的典范。起初我使用了一个返回文字的简单函数,即constexpr int func(){return 5;}
,但产生了同样的错误。我将第一条消息解释为“它应该是结构或类的成员函数”,但是Cppreference的示例显示它显然不是必需的。
那么,我在这里明显缺少什么?
答案 0 :(得分:38)
非常简单 - 因为Visual Studio不支持constexpr
(Visual Studio 2015之前)。
请注意,MSVC ++ 11是Visual Studio 2012; VC ++ 10是Visual Studio 2010。