2012-01-31 50 views
10

我最近安裝了Checkstyle插件,用於Eclipse,並且個人認爲它太棒了。但它給我的警告之一有點模糊。確切的警告是「不允許使用++」。它是關於後綴++在某一行像爲什麼使用前綴增量被認爲比標準建設中的後綴增量更好

for(int i = 0; i < SOMETHING; i++) 

好吧,我很清楚,foreach是迭代更好的建設,但不能處處適用,有時老派++是唯一的選擇。

當我改變該行

for(int i = 0; i < SOMETHING; ++i) 

警告消失。我知道i++++i之間以及這一點我的生活我認爲他們在標準for建設互換的差異。但Checkstyle認爲i++有害(或容易出錯)。

問題:爲什麼在for構造中前綴增量優於後綴增量?或者...是否Checkstyle錯了?

+0

預增量可以在例如C++在複雜的用戶定義類型上有運算符重載時。但是我不明白爲什麼它會對Java基元產生影響。 – 2012-01-31 13:50:41

回答

11

後綴遞增使得在需要的改性之前的舊值的表達式僅使用時的感覺。在丟棄該值的無效上下文中(如在for循環中),保存舊值是沒有意義的。

換句話說:

// makes sense because you need the old value to subscript the array 
stack[top++] = x; 
// in a void context, the old value is discarded 
top++; 

在C++中特別地,這兩個運營商可以被重載,和後綴的執行可以的,因爲返回舊值的要求是無效率的 - 它通常涉及複製舊對象以符合postfix運算符的原始語義。

隨着原始類型,任何像樣的編譯器將產生對兩種情況下相同的代碼,但第二個是從語言的語義觀點來看更好。

12

這是一個愚蠢的規則,恕我直言。它描述爲here

IllegalToken

檢查非法令牌。

理性:某些語言特性往往導致難以維持 代碼或是非顯而易見的開發新手。在某些框架中,其他功能可能不支持 ,例如在EJB組件中沒有本地方法 。

默認情況下,它禁止後綴增量,後綴減少和開關。您可以安全地禁用規則,或以不同的方式進行配置。

我的看法是,你的規則是一個標準的Java成語,而且取代我++ ++我將有一個讓新手問自己,爲什麼不使用標準的成語沒有其他作用。