在常数表达式中除以零

fredoverflow

如果我用一个常量表达式除以零,我的玩具编译器将崩溃:

int x = 1 / 0;

C和/或C ++标准是否允许这种行为?

user2357112支持Monica

仅仅存在1 / 0不允许编译器崩溃。最多允许假定该表达式将永远不会被求值,因此,执行将永远不会到达给定的行。

如果保证可以对表达式进行求值,则该标准对程序或编译器没有任何要求。然后编译器可能崩溃。

如果评估,则1/0仅是UB。

在C11标准给出一个明确的例子1 / 0所定义的行为未评估的时候:

因此,在以下初始化中,

        static int i = 2 || 1 / 0;

该表达式是值为1的有效整数常量表达式。

第6.6节脚注118。

1/0不是常量表达式。

C11标准的6.6节在“约束”下表示

  1. 常数表达式不得包含赋值,增量,减量,函数调用或逗号运算符,除非它们包含在未求值的子表达式中。
  2. 每个常量表达式的值都应等于其类型可表示值范围内的常量。

由于1/0在int可表示的值范围内未求得常数,因此1/0不是常数表达式。这是关于什么算作常量表达式的规则,例如关于在其中没有赋值的规则。您可以看到,至少对于C ++,Clang不会将1/0视为常量表达式

prog.cc:3:18: error: constexpr variable 'x' must be initialized by a constant expression
   constexpr int x = 1/ 0 ;
                 ^   ~~~~

将未评估的1/0设为UB并没有多大意义。

(x == 0) ? x : 1 / x即使x为0且评估1 / x为UB也是完美定义的。如果(0 == 0) ? 0 : 1 / 0是UB,那就是胡说八道。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

试图在SSRS表达式中除以零误差

来自分类Dev

SSRS表达式除以零误差

来自分类Dev

如何处理XPath 2.0表达式除以零中的错误

来自分类Dev

在MATLAB中评估符号表达式时除以零误差

来自分类Dev

为什么Java语言规范说表达式(n> 2)不是常数表达式?

来自分类Dev

如果对表达式的求值需要对引用的求值,为什么它不是“核心常数表达式”?

来自分类Dev

是否“整数大小= 10;” 产生一个常数表达式?

来自分类Dev

为什么标准库通用数学函数不是“常数表达式”?

来自分类Dev

在评估潜在常数表达式期间的不确定行为

来自分类Dev

Rust常数表达式可以使用默认属性吗?

来自分类Dev

从std :: string <char>到unsigned char [],出现错误“无法缩小非常数表达式”

来自分类Dev

何时'const'限定词保证变量为常数表达式?

来自分类Dev

在评估潜在常数表达式期间的不确定行为

来自分类Dev

为什么标准库的通用数学函数不是“常数表达式”?

来自分类Dev

计数表达式中的SSRS多个条件

来自分类Dev

Shell脚本中的整数表达式预期错误

来自分类Dev

外部模块中的调用函数表达式

来自分类Dev

立即调用JavaScript中的函数表达式

来自分类Dev

“立即调用的函数表达式”中的JavaScript原型

来自分类Dev

在JavaScript的函数表达式中引用此内容,

来自分类Dev

函数表达式中的私有变量

来自分类Dev

计数表达式中的SSRS多个条件

来自分类Dev

如何在函数表达式中调用属性?

来自分类Dev

修改函数表达式中的类变量

来自分类Dev

Javascript Mocha Tests-在函数表达式中测试函数表达式

来自分类Dev

C ++ constexpr函数实际上可以接受非常数表达式作为参数吗?

来自分类Dev

比较C ++ 20常数表达式中允许的动态分配对象的地址吗?

来自分类Dev

const int a = 1;如果a具有自动存储持续时间,则a是一个常数表达式

来自分类Dev

如何在C#中计算可以除以零的字符串表达式?

Related 相关文章

  1. 1

    试图在SSRS表达式中除以零误差

  2. 2

    SSRS表达式除以零误差

  3. 3

    如何处理XPath 2.0表达式除以零中的错误

  4. 4

    在MATLAB中评估符号表达式时除以零误差

  5. 5

    为什么Java语言规范说表达式(n> 2)不是常数表达式?

  6. 6

    如果对表达式的求值需要对引用的求值,为什么它不是“核心常数表达式”?

  7. 7

    是否“整数大小= 10;” 产生一个常数表达式?

  8. 8

    为什么标准库通用数学函数不是“常数表达式”?

  9. 9

    在评估潜在常数表达式期间的不确定行为

  10. 10

    Rust常数表达式可以使用默认属性吗?

  11. 11

    从std :: string <char>到unsigned char [],出现错误“无法缩小非常数表达式”

  12. 12

    何时'const'限定词保证变量为常数表达式?

  13. 13

    在评估潜在常数表达式期间的不确定行为

  14. 14

    为什么标准库的通用数学函数不是“常数表达式”?

  15. 15

    计数表达式中的SSRS多个条件

  16. 16

    Shell脚本中的整数表达式预期错误

  17. 17

    外部模块中的调用函数表达式

  18. 18

    立即调用JavaScript中的函数表达式

  19. 19

    “立即调用的函数表达式”中的JavaScript原型

  20. 20

    在JavaScript的函数表达式中引用此内容,

  21. 21

    函数表达式中的私有变量

  22. 22

    计数表达式中的SSRS多个条件

  23. 23

    如何在函数表达式中调用属性?

  24. 24

    修改函数表达式中的类变量

  25. 25

    Javascript Mocha Tests-在函数表达式中测试函数表达式

  26. 26

    C ++ constexpr函数实际上可以接受非常数表达式作为参数吗?

  27. 27

    比较C ++ 20常数表达式中允许的动态分配对象的地址吗?

  28. 28

    const int a = 1;如果a具有自动存储持续时间,则a是一个常数表达式

  29. 29

    如何在C#中计算可以除以零的字符串表达式?

热门标签

归档