定義這種方式,我們既不能做++x++
也不能做++x--
。但在另一方面,無論(++x)++
和(++x)--
是有用的表達式:(++x)++
增量x
由兩個並返回「中間」的值,而(++x)--
實質上等同於x+1
但完全避免了打電話operator+
,這是非常有用的,有時。爲什麼postfix operator ++比前綴operator ++具有更高的優先級?
那麼爲什麼優先級沒有被定義爲++x++
自動擴展到(++x)++
而不是++(x++)
?對於後者我有一些不明白的含義,還是僅僅將優先級保持爲一個簡單列表,並且所有前綴運算符構成一個單一級別?
編輯好的,我沒有明確說出來,但是:當然我的意思是x
是用戶定義的類型。對於內置類型,(x+=2)-1
當然好於(++x)++
,而x+1
是lot好於(++x)--
。我想到的情況是一個相當複雜類型的半關聯容器的迭代器,其中操作符+=
和+
(專爲隨機訪問而設計)必須重建緩存以便爲一般請求高效工作,因此比++
慢一個數量級。但是我當然可以修改它們,以便首先檢查參數是否是非常小的整數,在這種情況下,只需重複調用operator++
而不是隨機訪問過程。這應該可以在這裏很好地工作,儘管我可以想象我可能在某種程度上有一種情況,我希望operator+=
總是以隨機訪問的方式進行,而不管我呈現的數字有多少。
所以......我,我可以得出結論,答案是:
具有簡單和幸福memorizeable優先級表的優點,即任何來之前所有後綴運算符前綴運算符的足以容忍總是必須使用括號來組成前綴和後綴運算符的小缺陷,因爲該組合很少被使用。
更簡單的「C確實是這樣」,而這很可能是真正原因,是迄今爲止對我不太滿意,因爲自從++x++
是不是在C它會在所有允許可以在不破壞現有代碼的情況下重新定義這種構圖。
無論如何,我會繼續使用(++x)--
,因爲圓括號確實不會傷害太多。
即使這些例子不是ub,由於混淆的餘地很大,所以很少有效用 – 2011-05-22 07:36:17
都不是在C++中的UB 0x – 2011-05-22 07:42:11
最初的C規範是否有任何關於這些運算符如何分組的說法? – 2011-05-22 09:47:20