表達式的副作用是指:表達式在求值過程中要改變該表達式中作爲操作數的某個變量的值。
產生副作用的原因是:表達式中包含了具有副作用的操作符,這樣的操作符包括:賦值操作符、複合賦值操作符、增1減1操作符。(具有副作用的操作符必須作用於變量)
由作用於變量的操作符(後增1後減1除外)構成的表達式的值就是該操作符所作用的變量所獲得的值,此表達式的值可視同變量:
操作符後增1: int x=3;
cout<< x++;
cout<< ' '<< x;
顯示結果爲: 3 4
此時變量x值是4,而表達式的值是3,因此後增1(後減1同)構成的表達式的值不是該操作符所作用的變量所獲得的值。
由作用於變量的操作符(後增1後減1除外)構成的表達式可視爲變量:
int
x=3;
cout<<
++(x+=2); //表達式x+=2可視同變量
cout<<
' '<< x;
(1)++++k; //正確。兩個前增1操作符,且是一元操作符,結合順序爲從右至左,
//計算++k後仍然是一個表達式
(2) k----; //錯誤。一元操作符,結合順序爲從右至左,先計算最後兩個--,但沒有變量
(3) (++k)++; //正確。(++k)先計算,視爲變量,在計算括號外面的++
(4) ++k++; //錯誤。先執行後增1,執行完後k++不能視爲變量。不能再執行前增1
(5) k--+=5; //錯誤。同4,執行完k--後是一個常量,不能給常量進行賦值。
(6) k+++5; //正確。
(7) k-++5; //錯誤。先執行k-+,無法被識別。