52-C++前綴格式和後綴格式

    顯然,如果變量被用於某些目的(如用作函數參數或給變量賦值),使用前綴格式和後綴格式的結果將不同。然而,如果遞增表達式的值沒有被使用,情況又如何呢?例如,下面兩條語句的作用是否不同?

x++;

++x;

下面兩條語句的作用是否不同?

for( n =lim ; n>0;--n)

...;

for( n = lim ; n>0;n--)

...;

從邏輯上說,在上述兩種情形下,使用前綴格式和後綴格式沒有任何區別。表達式的值未被使用,因此只存在副作用。在上面的例子中,使用這些運算符的表達式爲完整表達式,因此將x加1和n減1的副作用將在程序進入下一步之前完成,前綴格式和後綴格式的最終效果相同。

然而,雖然選擇使用前綴格式還是後綴格式對程序的行爲沒有影響,但執行速度可能有細微差別。對於內置類型和當代的編譯器語言而言,這看似不是什麼問題。然而,C++允許您針對類定義這些運算符,在這種情況下,用戶這樣定義前綴函數:將值加1,然後返回結果;但後綴版本首先複製一個副本,將其加1,然後將複製的副本返回。因此,對於類而言,前綴版本的效率比後綴版本高。

總之,對於內置類型,採用哪種格式不會有差別;但對於用戶定義的類型,如果有用戶定義的遞增和遞減運算符,則前綴格式的效率更高。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章