为什么编译器不将赋值表达式的右侧表达式的所有计算值提升到至少左侧类型级别?
例如,"double x= (88.0 - 32) *5/ 9“正确地从华氏温度转换为摄氏."double x= (88.0 - 32) * (5 / 9)“不会。
我的问题不是为什么第二个示例不返回所需的结果。我的问题是,为什么编译器不键入将(5/9)的求值提升到双值。
发布于 2015-07-24 02:31:39
为什么编译器不将赋值表达式的右侧表达式的所有计算值提升到至少左侧类型级别?
很好的问题。实际上,让我们假设编译器会自动完成这一任务。现在,以你为例:
double x = 88.0 - 32 * 5 / 9现在,这个分配的RHS部分可以通过多种方式完全转换为所有令牌(Lexemes)的双重。我想加入其中一些:-
这就变成了组合问题,比如“在多少方面,一个给定的表达式可以减少到双倍(不管是什么类型)?”
但是,考虑到内存的详尽使用,编译器设计人员不会在其*中将每个令牌转换为所需的最高类型(在这里是double)。而且,它似乎是无缘无故地这样做的一个不自然的理由,因为用户可以更好地执行操作,方法是手动给编译器一些提示,提示它必须使用用户编码的方式进行类型化。
作为一切,自动转换不会总是产生结果,因为有时候用户想要的东西可能无法通过自动类型提升的这种原理来实现,但是,类型促进的反之亦然,就像今天编译器所做的那样。当前的类型转换规则是正确地服务于所有目的,尽管需要额外的努力,但是,完美无缺的。
https://stackoverflow.com/questions/31572193
复制相似问题