为什么我不能递增简单constexpr函数的参数?

And*_*man 1 c++ visual-c++ constexpr c++11 c++14

Visual Studio 2015更新3。

我读了《编程》。Bjarne Stroustrup的《使用C ++的原理和实践》(第二版)。我学习constexpr功能...

有用:

constexpr int get_value(int n) {
    return n + 1;
}
Run Code Online (Sandbox Code Playgroud)

但是我不能编译它(代替第一个变体):

constexpr int get_value(int n) {
    return ++n;
}
Run Code Online (Sandbox Code Playgroud)

我得到错误:

constexpr函数返回的值不是恒定的

n本地的变量get_value函数。即n变量更改不会影响外部代码。

为什么该get_value函数的第二个变体是错误的?

T.C*_*.C. 5

第二个在C ++ 11中是不允许的constexpr。该标准甚至有一个非常相似的示例(N3337 [dcl.constexpr] / 3):

constexpr int prev(int x)
{ return --x; } // error: use of decrement
Run Code Online (Sandbox Code Playgroud)

N3337 [expr.const] / 2明确禁止常量表达式中的“递增或递减运算”。

C ++ 14 Extended constexpr放宽了这些要求,但MSVC并未实现。