constexpr未在VC2013中编译

constexpr not compiling in VC2013

本文关键字:编译 VC2013 未在 constexpr      更新时间:2023-10-16

此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>------开始生成:项目:Project1,配置:调试Win32------1> 来源.cpp1> 。。。。\source.cpp(3):错误C2144:语法错误:"int"前面应加";"1> 。。。。\source.cpp(3):错误C4430:缺少类型说明符-假定为int。注意:C++不支持默认的int==========生成:0成功,1失败,0最新,0跳过==========

Herb Sutter在他的博客上提到了constexpr,但不清楚它在哪个版本有效/将有效?http://herbsutter.com/2013/09/09/visual-studio-2013-rc-is-now-available/#comment-13521

Microsoft发布了一个C++11兼容性表,其中constexpr被明确标记为在Visual Studio 2013中不可用。

不过,2013年11月的CTP有它。

来源:Google visual studio constexpr

constexpr在Visual Studio 2013 RTM中不受支持,请参阅兼容性表。这不仅适用于RTM版本,也适用于Visual Studio更新。

如果你想坚持使用Visual Studio 2013,你可以下载Visual C++编译器2013年11月的CTP,它附带了一些新功能,请参阅MSDN博客。不幸的是,微软没有与最新的Visual Studio更新功能和CTP功能合并,并明确表示他们不打算这样做

如果我们想要这一切,我们需要等待Visual Studio 2015,请参阅MSDN关于VS 2015预览版的博客。

正如其他人所提到的,2013年11月客户技术预览版(CTP)将允许您访问constexpr*

请注意,只需下载,您就需要将"平台工具集"更改为"Visual C++编译器2013年11月CTP(CTP_Nov2013)"才能使用新编译器。您可以打开项目的"属性页",转到:"配置属性">"常规",然后更改"平台工具集"。

*关于您实际可以访问constexpr的哪些部分,有一些相互矛盾的信息,但这绝对不是constexpr的所有标准定义。微软在这里说,2013年11月的CTP增加了:

constexpr支持(建设者除外)

微软在这里说它包含:

constexpr(成员功能除外)

我甚至无法测试它是否支持成员函数,因为它肯定不支持任何类型的constexpr构造。例如,此代码在2013年11月的CTP:中给出了此错误

错误C2127:使用非常量表达式非法初始化"constexpr"实体

另请注意:在撰写本文时,Visual Studio 2015预览版仍然不支持constexpr构造。我一直在为最后的发行祈祷。

您需要安装VS2013 Update 5。(我在更新3,但它不起作用)关于";2013年11月CTP";截至本文撰写之时不适用。您可以通过以下方式进行操作:https://my.visualstudio.com

然后下载,或者:https://my.visualstudio.com/Downloads?q=visual%20studio%202013