当我们尝试将变量除以零时,为什么编译器没有显示错误

用户1968030

如果我们尝试运行以下代码:

int d = 10/0;

我们收到一个编译器错误。所以我们不能除以零。

现在考虑以下代码:

  int d = 10;
  int o = d / 0;

d可以有任何东西并且将任何东西除以零是不行的

我们没有收到编译器错误。该变量具有我们不能除以零的任何内容。当我们尝试将变量除以零时,为什么编译器没有给出错误?

汉斯·帕桑特

您需要看一下C#语言规范的第7.18章。它讨论常量表达式我将仅概述基础知识。

C#编译器努力尝试在编译时评估表达式。只要操作数都具有已知值,并且运算符是简单的运算符,则编译器可以在编译时计算表达式的值并直接使用结果,而不是在运行时生成代码来对表达式求值。这听起来像是一种优化,但并不是完全一样,在许多地方需要常量表达式就像case语句的值一样,使用const关键字的声明,枚举声明的值和[attribute]的参数也是如此。

因此,毫无疑问10 / 0,这是一个具有文字值和简单运算符的表达式,因此编译器可以直接计算结果,并看到它将触发异常,因此在编译时会抱怨该异常。

d / 0因为恒定表达d变量。您可能会争辩说由于在上面的语句中分配了编译器,因此编译器很可能知道的价值d但这并没有做到,优化此类代码是抖动优化器的工作。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当我们声明静态变量时,编译器实际上会做什么?

来自分类Dev

当我将暗淡的长度设置为零时,为什么不会引起错误?

来自分类Dev

为什么当我们声明一个额外的模板参数并且未在定义中使用时编译器会抛出错误?

来自分类Dev

当我在Java的静态块中声明接口时,为什么编译器会显示错误?

来自分类Dev

为什么当我使用重载的赋值运算符时却出现错误,却没有使用编译器提供的运算符?

来自分类Dev

当我有两个函数时,为什么编译器不显示错误,一个将基类作为参数,一个将派生类作为参数?

来自分类Dev

当我们将指针打印到字符类型时,为什么C ++显示字符?

来自分类Dev

返回未初始化的变量时,为什么编译器没有给出错误?

来自分类Dev

我们应该在程序没有错误之前禁用编译器优化吗?

来自分类Dev

在C#中为什么我可以将接口转换为任何类型而没有编译器错误

来自分类Dev

为什么在未使用的局部变量上没有得到编译器错误?

来自分类Dev

当我们有访问器和更改器时,为什么要声明私有字段?

来自分类Dev

为什么编译器无法在Haskell中为我们处理新类型?

来自分类Dev

为什么编译器不允许我们使用 `var` 而不是 `generic type`?

来自分类Dev

当我不使用库时,为什么编译器会给我错误“未定义的外部符号”?

来自分类Dev

为什么编译器显示错误

来自分类Dev

当我们在此函数中反转字符串时,为什么char * str的指针没有改变?

来自分类Dev

为什么当我的IDE没有时,javac会抛出编译错误?

来自分类Dev

为什么在此代码中没有除以零的编译时警告或运行时崩溃?

来自分类Dev

为什么当我们调用“任务”变量时,必须将其写为“ task()”

来自分类Dev

当我们有一个红色区域时,为什么我们需要堆栈分配?

来自分类Dev

当我们有一个红色区域时,为什么我们需要堆栈分配?

来自分类Dev

为什么当我们在终端中输入错误的密码时,响应时间过长?

来自分类Dev

为什么当我尝试从C ++调用python函数时为什么出现“没有attirubute错误”

来自分类Dev

当我向django添加新语言时,没有错误,但没有显示我的翻译。为什么?

来自分类Dev

为什么我可以将一个Int分配给一个没有编译器错误的字符串?

来自分类Dev

为什么我可以将一个Int分配给一个没有编译器错误的字符串?

来自分类Dev

当我们尝试将timeInterval <0.1秒设置为计时器时,模拟器是否存在错误?

来自分类Dev

当我们可以编写[NSString new]时,为什么会有[NSString string]?

Related 相关文章

  1. 1

    当我们声明静态变量时,编译器实际上会做什么?

  2. 2

    当我将暗淡的长度设置为零时,为什么不会引起错误?

  3. 3

    为什么当我们声明一个额外的模板参数并且未在定义中使用时编译器会抛出错误?

  4. 4

    当我在Java的静态块中声明接口时,为什么编译器会显示错误?

  5. 5

    为什么当我使用重载的赋值运算符时却出现错误,却没有使用编译器提供的运算符?

  6. 6

    当我有两个函数时,为什么编译器不显示错误,一个将基类作为参数,一个将派生类作为参数?

  7. 7

    当我们将指针打印到字符类型时,为什么C ++显示字符?

  8. 8

    返回未初始化的变量时,为什么编译器没有给出错误?

  9. 9

    我们应该在程序没有错误之前禁用编译器优化吗?

  10. 10

    在C#中为什么我可以将接口转换为任何类型而没有编译器错误

  11. 11

    为什么在未使用的局部变量上没有得到编译器错误?

  12. 12

    当我们有访问器和更改器时,为什么要声明私有字段?

  13. 13

    为什么编译器无法在Haskell中为我们处理新类型?

  14. 14

    为什么编译器不允许我们使用 `var` 而不是 `generic type`?

  15. 15

    当我不使用库时,为什么编译器会给我错误“未定义的外部符号”?

  16. 16

    为什么编译器显示错误

  17. 17

    当我们在此函数中反转字符串时,为什么char * str的指针没有改变?

  18. 18

    为什么当我的IDE没有时,javac会抛出编译错误?

  19. 19

    为什么在此代码中没有除以零的编译时警告或运行时崩溃?

  20. 20

    为什么当我们调用“任务”变量时,必须将其写为“ task()”

  21. 21

    当我们有一个红色区域时,为什么我们需要堆栈分配?

  22. 22

    当我们有一个红色区域时,为什么我们需要堆栈分配?

  23. 23

    为什么当我们在终端中输入错误的密码时,响应时间过长?

  24. 24

    为什么当我尝试从C ++调用python函数时为什么出现“没有attirubute错误”

  25. 25

    当我向django添加新语言时,没有错误,但没有显示我的翻译。为什么?

  26. 26

    为什么我可以将一个Int分配给一个没有编译器错误的字符串?

  27. 27

    为什么我可以将一个Int分配给一个没有编译器错误的字符串?

  28. 28

    当我们尝试将timeInterval <0.1秒设置为计时器时,模拟器是否存在错误?

  29. 29

    当我们可以编写[NSString new]时,为什么会有[NSString string]?

热门标签

归档