“函数调用必须在常量表达式中具有常量值”

希雷马

我有以下代码:

constexpr unsigned long long power_function(const unsigned long long prime, const unsigned long long iterations) {
    return iterations > 0 ? prime * power_function(prime, iterations - 1) : prime;
}

/* Inside my Class Definition*/

private:
    static constexpr unsigned long long prime = power_function(-363, 1'000'000); //Error occurs here

IntelliSense抱怨power_function使用不正确。但是对于我的一生,我无法弄清问题所在。我正在使用Visual Studio 2015,仅供参考。

错误讯息:

Error   C2131   expression did not evaluate to a constant   Basic Server    c:\<snip>   28  
Error   C2131   expression did not evaluate to a constant   Basic Server    c:\<snip>   33  

第28行对应于返回函数所在的行,第33行对应于定义constexpr的行。

卡利亚拉特

constexprgcc和clang编译器的递归限制为512 由于编译器将constexpr函数解释为内联函数(C ++ Standard 7.1.5 subsec。2),因此必须在编译时进行解析。如果经过512次迭代,编译器无法将表达式解析为常量,则编译器将停止并引发错误。该标准建议递归constexpr函数调用的最小值为512 ,但不要求这样做(请参阅标准中的附录B [限制] 2.38)。

此限制可能适用于Visual Studio,但我不确定。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

表达式必须在用户输入的大小的数组中具有常量值错误

来自分类Dev

Lambda函数中不是常量表达式

来自分类Dev

C结构对象堆栈-常量表达式中不允许函数调用(错误)

来自分类Dev

在常量表达式中调用的“静态constexpr”函数是...错误?

来自分类Dev

对构造函数的调用不能出现在常量表达式中

来自分类Dev

为什么STL中没有常量表达式字符串构造函数?

来自分类Dev

Verilog范围必须由常量表达式限制

来自分类Dev

在常量表达式上下文中定义之前,嵌套的constexpr函数调用

来自分类Dev

铛说对无效约束函数的调用不是常量表达式

来自分类Dev

在常量表达式上下文中定义之前,嵌套的constexpr函数调用

来自分类Dev

具有常量表达式的初始化程序可能在C99中溢出

来自分类Dev

SystemVerilog无法识别常量:错误:范围必须由常量表达式限制

来自分类Dev

切换枚举的值:case表达式必须是常量表达式

来自分类Dev

大小写表达式必须是常量表达式

来自分类Dev

大小写表达式必须是常量表达式

来自分类Dev

Java switch:case表达式必须是常量表达式

来自分类Dev

布尔常量表达式中的冗余实例化

来自分类Dev

在常量表达式中更改联合的活动成员

来自分类Dev

枚举属性中的变量:需要常量表达式

来自分类Dev

在ORDER BY列表中遇到了常量表达式

来自分类Dev

在 C# 中创建常量表达式

来自分类Dev

飞镖:常数评估错误。方法“ []”不能在常量表达式中调用

来自分类Dev

c ++:“期望的常量表达式”

来自分类Dev

了解常量表达式错误

来自分类Dev

需要常量表达式

来自分类Dev

地址常量表达式

来自分类Dev

需要常量表达式

来自分类Dev

“预期常量表达式”错误

来自分类Dev

Android“需要常量表达式”

Related 相关文章

  1. 1

    表达式必须在用户输入的大小的数组中具有常量值错误

  2. 2

    Lambda函数中不是常量表达式

  3. 3

    C结构对象堆栈-常量表达式中不允许函数调用(错误)

  4. 4

    在常量表达式中调用的“静态constexpr”函数是...错误?

  5. 5

    对构造函数的调用不能出现在常量表达式中

  6. 6

    为什么STL中没有常量表达式字符串构造函数?

  7. 7

    Verilog范围必须由常量表达式限制

  8. 8

    在常量表达式上下文中定义之前,嵌套的constexpr函数调用

  9. 9

    铛说对无效约束函数的调用不是常量表达式

  10. 10

    在常量表达式上下文中定义之前,嵌套的constexpr函数调用

  11. 11

    具有常量表达式的初始化程序可能在C99中溢出

  12. 12

    SystemVerilog无法识别常量:错误:范围必须由常量表达式限制

  13. 13

    切换枚举的值:case表达式必须是常量表达式

  14. 14

    大小写表达式必须是常量表达式

  15. 15

    大小写表达式必须是常量表达式

  16. 16

    Java switch:case表达式必须是常量表达式

  17. 17

    布尔常量表达式中的冗余实例化

  18. 18

    在常量表达式中更改联合的活动成员

  19. 19

    枚举属性中的变量:需要常量表达式

  20. 20

    在ORDER BY列表中遇到了常量表达式

  21. 21

    在 C# 中创建常量表达式

  22. 22

    飞镖:常数评估错误。方法“ []”不能在常量表达式中调用

  23. 23

    c ++:“期望的常量表达式”

  24. 24

    了解常量表达式错误

  25. 25

    需要常量表达式

  26. 26

    地址常量表达式

  27. 27

    需要常量表达式

  28. 28

    “预期常量表达式”错误

  29. 29

    Android“需要常量表达式”

热门标签

归档