c++ - 为什么我不能增加简单 constexpr 函数的参数?

标签 c++ c++11 visual-c++ c++14 constexpr

Visual Studio 2015 更新 3。

我阅读了编程。 Bjarne Stroustrup 使用 C++ 的原理和实践(第二版)。我学习了 constexpr 函数...

有效:

constexpr int get_value(int n) {
    return n + 1;
}

但我无法编译这个(而不是第一个变体):

constexpr int get_value(int n) {
    return ++n;
}

我得到错误:

constexpr function return is non-constant

nget_value 函数的本地 变量。 IE。 n 变量改变不影响外部代码。

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

最佳答案

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

constexpr int prev(int x)
{ return --x; } // error: use of decrement

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

C++14 扩展 constexpr 放宽了这些要求,但 MSVC 没有实现它。

关于c++ - 为什么我不能增加简单 constexpr 函数的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38674725/

相关文章:

c++ - 为什么这个 for 循环条件不起作用?

C++ 重构,扩展方法 typedef

c++ - 每个可变参数模板参数生成一个类成员

c++ - 从单元测试用例运行线程是一个好习惯吗?

c++ - 如何正确使用 "__beginthreadex"?

c++ - 由 C++ 编译器优化时,F2C 翻译的代码会中断

c++ - 显示前测试 QToolTip 是否被遮挡

c++ - 优化代码 - CPU 与内存

具有指定模板参数的 C++11 make_pair 无法编译

c++ - 如何获取此文件夹中的文件夹列表?