程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> i++,++i,i+=1,i = i+1在C++中的區別

i++,++i,i+=1,i = i+1在C++中的區別

編輯:C++入門知識

其實這個問題可以從三個角度去分析:語言規范,編譯器實現,CPU支持。首先從語言規范上來講;前置++和後置++是不等價的,前置++在規范中明確指出 和+=組合操作符是等價的,但和E = E+1;這樣的賦值操作不等價,因為後者對操作數E需要進行兩次求值,而+=組合操作符只進行一次求值。後置++表示操作數作為結果值被獲取之後操作數的 原值再進行更新。 聰明的編譯器可以根據應用場景進行優化(標准不規定相關優化的手段,由編譯器自決),但不能過度依賴這種優化,因為編譯器還是不如人聰明,而且復雜的表達式也不一定可以優化掉。從 CPU的角度上來講CPU支持什麼樣的指令集是絕對決定了相應操作符計算效率。在嵌入式開發中不同的CPU之間的差異就大了。比如說PowerPC CPU就沒有直接可以對應後綴++的t自增指令,某些版本的ARM CPU沒有任何自增指令(無論是前置還是後置式的)。因此無論從CPU支持來講還是編譯器優化來看前置++肯定是高效的,後置++的即時CPU和編譯器優化都支持也不能比前置++更高效,在使用的時候應該盡量使用前置++。C/C++提供這麼多操作符是因為它是最接近底層的高級語言,它需要盡可能實現CPU對應 指令的高級實現進而為性能優化提供選擇。而其它多數高級語言不會給你選擇的權利。

下面是標准中的相關信息:

The value of the operand of the prefix ++ operator is incremented. The result is the new
value of the operand after incrementation. The expression ++E is equivalent to (E+=1).
See the discussions of additive operators and compound assignment for information on
constraints, types, side effects, and conversions and the effects of operations on pointers.

The result of the postfix ++ operator is the value of the operand. After the result is
obtained, the value of the operand is incremented. (That is, the value 1 of the appropriate
type is added to it.) See the discussions of additive operators and compound assignment
for information on constraints, types, and conversions and the effects of operations on
pointers. The side effect of updating the stored


A compound assignment of the form E1 op= E2 differs from the simple assignment
expression E1 = E1 op (E2) only in that the lvalue E1 is evaluated only once.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved