簡單表達式等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