此constexpr代码未在Visual Studio 2013版本12.0.21005.1 REL
中编译是否有更新的Visual Studio编译器可以与constexpr一起使用?
#include <iostream>
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;
}
编译输出:
1>------ Build started: Project: Project1, Configuration: Debug Win32 ------ 1> Source.cpp 1>....\source.cpp(3): error C2144: syntax error : 'int' should be preceded by ';' 1>....\source.cpp(3): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Herb Sutter在他的博客上提到了constexpr,但不清楚它的工作原理/工作原理是什么? http://herbsutter.com/2013/09/09/visual-studio-2013-rc-is-now-available/#comment-13521
答案 0 :(得分:50)
Microsoft发布了一个C ++ 11兼容性表,constexpr
为clearly marked as not being available in Visual Studio 2013。
来源: Google visual studio constexpr
答案 1 :(得分:9)
constexpr
,请参阅compatibility table。这不仅适用于RTM版本,也适用于Visual Studio更新。
如果您想坚持使用Visual Studio 2013,可以下载Visual C++ Compiler November 2013 CTP附带的一些新功能,请参阅MSDN blog。遗憾的是,微软没有与最新的Visual Studio Update功能和CTP功能合并,并明确指出他们不打算这样做。
如果我们想要一切,我们需要等待Visual Studio 2015,请参阅MSDN blog about VS 2015 Preview。
答案 2 :(得分:3)
正如其他人所说,November 2013 Customer Technology Preview(CTP)会让您访问constexpr
*
请注意,只需下载即可将“平台工具集”更改为“Visual C ++编译器2013年11月CTP(CTP_Nov2013)”以使用新编译器。您可以通过打开项目的“属性页”并转到:“配置属性”&gt;来实现。 “常规”,然后更改“平台工具集”。
*关于您实际可以访问constexpr
的哪个部分,有一些相互矛盾的信息,但它绝对不是constexpr
的所有标准定义。微软称{2013年11月CTP增加了here:
constexpr
支持(构造函数除外)
微软称其here包含:
constexpr
(成员函数除外)
我甚至无法测试它是否支持成员函数,因为它肯定不支持任何类型的constexpr
构造。例如,this code在2013年11月的CTP中出现此错误:
错误C2127:使用非常量表达式非法初始化'constexpr'实体
另外需要注意:在编写本文时,Visual Studio 2015 Preview仍然不支持constexpr
构造。在最后的释放中保持我的手指交叉。
答案 3 :(得分:0)
您需要安装VS2013 Update 5.(我在更新3上,但它无法正常工作) 在撰写本文时,关于“2013年11月CTP”的内容并不适用。 你可以去这里:https://my.visualstudio.com
然后下载,或者: https://my.visualstudio.com/Downloads?q=visual%20studio%202013&wt.mc_id=o~msft~vscom~older-downloads