2016-02-17 80 views
0

剛開始做操作符重載,我的老師並沒有深入研究,所以我想知道爲什麼前綴/後綴增量/減量的返回類型不同。當我看到前綴重載時,返回類型被寫爲Type &,但後綴的返回類型被寫爲Type。我做了前綴沒有&和功能都運行正常。返回類型是否影響任何東西,或者它只是另一種區分前綴和後綴的方法?爲什麼前綴增量重載返回類型而不是類型?

回答

2

的原因是爲了讓鏈接:

++ ++ ++ i; 

爲了讓i三重增量,++必須返回參考並採取參考。如果它返回一個臨時副本,第二個++會增加...臨時副本(實際上,臨時副本不會綁定&,所以它甚至不會編譯)。

+0

那不是UB嗎? – Slava

+0

@Slava - 不,用戶定義的操作符包含一個函數調用,它爲表達式添加適當的序列點。對於int變量,這與* i ++ + ++ i *非常不同。 –

+0

事實上,如果內置的鏈接前綴UB帶來了有趣的問題。在這裏問它http://stackoverflow.com/questions/35464793/why-chained-prefix-increment-decrement-for-builtin-type-is-not-ub-for-c – Slava

1

要添加到Emilio的答案後綴增量創建一個臨時變量,並將其設置爲1加上您希望增加的變量,其中前綴增量增加實際變量,在某些情況下可以提高性能。

0

主要原因是遵循C++中內置類型的語義,其中前綴增量/減量返回左值,後綴1返回右值。詳情可查詢here

相關問題