【问题标题】:Why does MSVC++11 rejects constexpr qualification of a function?为什么 MSVC++11 拒绝函数的 constexpr 限定?
【发布时间】:2013-08-29 14:24:29
【问题描述】:

因此,使用 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++ 不支持 default-int

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

那么,我显然在这里遗漏了什么?

【问题讨论】:

    标签: c++ visual-studio-2012 c++11 constexpr


    【解决方案1】:

    很简单 - 因为 Visual Studio 不支持 constexprVisual Studio 2015 之前的版本)。

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

    【讨论】:

    • 哦,没想到...谢谢指出!我会保留那个链接,并尽快接受。虽然我不明白反对票...
    • 我认为这是一个合理的问题,其中包含无效的代码、您期望它执行的操作以及您遇到的错误。
    • 我同意,这个问题很好。事实上,我会自己去投票。
    • @Chowlett:随时通知我们! :)
    • 只是一个小提示:答案中的链接仍然说MSVC不支持constexpr,但是由于Visual C++ Compiler November 2013 CTP,MSVC++12现在部分支持(仍然不支持成员函数)。
    猜你喜欢
    • 2015-05-29
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多