首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在赋值语句中自动提升右侧表达式的编译器类型

在赋值语句中自动提升右侧表达式的编译器类型
EN

Stack Overflow用户
提问于 2015-07-22 19:21:22
回答 1查看 137关注 0票数 1

为什么编译器不将赋值表达式的右侧表达式的所有计算值提升到至少左侧类型级别?

例如,"double x= (88.0 - 32) *5/ 9“正确地从华氏温度转换为摄氏."double x= (88.0 - 32) * (5 / 9)“不会。

我的问题不是为什么第二个示例不返回所需的结果。我的问题是,为什么编译器不键入将(5/9)的求值提升到双值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-24 02:31:39

为什么编译器不将赋值表达式的右侧表达式的所有计算值提升到至少左侧类型级别?

很好的问题。实际上,让我们假设编译器会自动完成这一任务。现在,以你为例:

代码语言:javascript
复制
double x = 88.0 - 32 * 5 / 9

现在,这个分配的RHS部分可以通过多种方式完全转换为所有令牌(Lexemes)的双重。我想加入其中一些:-

  1. 88.0 - 32 *(双倍)(5/ 9)
  2. 88.0 - 32 *5/9/默认规则
  3. 88.0 -(双)(32* 5) /9
  4. 个人类型转换为加倍每个标记,这似乎不是一个双重实体。
  5. 其他几种方式。

这就变成了组合问题,比如“在多少方面,一个给定的表达式可以减少到双倍(不管是什么类型)?”

但是,考虑到内存的详尽使用,编译器设计人员不会在其*中将每个令牌转换为所需的最高类型(在这里是double)。而且,它似乎是无缘无故地这样做的一个不自然的理由,因为用户可以更好地执行操作,方法是手动给编译器一些提示,提示它必须使用用户编码的方式进行类型化。

作为一切,自动转换不会总是产生结果,因为有时候用户想要的东西可能无法通过自动类型提升的这种原理来实现,但是,类型促进的反之亦然,就像今天编译器所做的那样。当前的类型转换规则是正确地服务于所有目的,尽管需要额外的努力,但是,完美无缺的

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31572193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档