简单表达式等Java编译器如何解析类型转换?
(x) - y
取决于x
是否是一种类型的名称或不被解释不同。如果x
不是类型名称,则(x) - y
仅从x
减去y
。但是,如果x
是类型名称,则(x) - y
计算y
的负数,并将结果值转换为x
。
在典型的C或C++编译器中,x
是否为类型的问题是可以回答的,因为解析器一旦处理typedef或struct声明就将这些信息传递给词法分析器。 (我认为这种要求的违反级别是C设计中最难处理的部分)。
但是在Java中,x
可能在源代码后面才会定义。 Java编译器如何消除这种表达式的歧义?
很明显,Java编译器需要多次传递,因为Java不需要使用前声明。但是这似乎意味着第一遍必须在解析表达式时做一个非常草率的工作,然后在稍后的传递中进行另一个更精确的表达式分析。这似乎很浪费。
有没有更好的方法?
我没有downvote,但如果不是double,那么你使用了double,编译器就会允许它,因为_operator -_可以应用于双打。我相信这是不赞成的。 – 2008-12-30 17:46:53
自Java 1.5以来,您可以使用任何算术运算符与双打,浮动等(由于自动装箱)。正如我所说,添加圆括号使得它无错地编译。 – 2008-12-30 17:51:29