1.內建型別
字首式返回變數自增或自減之後的值,字尾式對變數進行增、減,但返回變數原來的值。
字首自增生成左值,而字尾自增操作生成右值
左值:一定應著乙個位址,非const左值可讀可寫,占用一塊記憶體。可以出現在賦值操作左邊的值。
右值:可用於賦值操作的右邊但不能用於左邊的值,只可讀不可寫,可能為const,可能不佔據記憶體,只是乙個中間計算結果
#include using namespace std;
int main()
2.自定義型別:
1. 為了與內建型別一致,字首式操作符應返回被增量或減
量物件的引用:因為物件沒變,從呼叫之後起,對返回值的修改必須反映到原物件上,所以應該返回引用,而不能是物件。
2.為了與內建操作符一致, 字尾式操作符應返回舊值 (即,
尚未自增或自減的值),並且應作為值返回,而不是
返回引用。
因為字尾式的處理過程為:首先建立乙個區域性物件,並將其初始化為原物件的副本,然後對原物件呼叫字首自增運算子,最後返回區域性物件。因為不能返回區域性物件的引用,所以只能返回物件而不能返回引用。
注:若要與內建型別完全一致,由於內建型別的字尾自增返回右值,只可讀不可寫,所以可以通過將字尾操作符的返回值定義為const 物件,即可使其成為右值。
3.不允許修改基本型別的臨時值
因為基本型別的臨時值是右值,不可寫(例如函式返回值為基本型別時,返回值是存在eax暫存器中),而對於自定義型別,由於臨時物件佔據記憶體空間,是左值,所以可以
修改它所佔據的記憶體。
所以對當函式返回值是基本型別時,不能對返回值進行自增自減等寫入操作。
C語言自增自減
i,i 使用i之前,先使i的值加 減 1。i i 使用i之後,再使i的值加 減 1。其中 i和i 的作用相當於i i 1。但是 i和i 不同之處在於 i是先執行i i 1後,再使用i的值 而i 是先使用i的值後,再執行i i 1。例如 i 6a i i的值先變成7,再賦值給a,a的值才為7 b i ...
自增「 」和自減「 」
int x 10 int j j x 看這邊 system.out.println x int x 10 int j x x 看這邊 system.out.println x 第乙個會輸出11,第二個會輸出10。這是今天偶然看到的,而這個解釋聽起來比較容易理解 x 是乙個表示式,它的值是x,在這個表...
正解自增 自減
許多語言都有自增 自減運算子。下面以c語言為例,將此類運算子的運算特徵正解一下 一 先看字尾 b 2 a b 計算過程 1.先計算表示式b 的值,結果為2 即將b自增前的值作為表示式b 的值 2.再將表示式b 的值賦值給a,即a得到2 3.最後將b自增後的值賦值給b,即b為3 注意 在此過程中,沒有...