前置及後置

2021-06-27 11:04:45 字數 1578 閱讀 7239



關於前置及後置++,--

a++ (

temp=a,a+=1,temp

) //

由此看出後置

++產生臨時變數

++a (a+=1,a)

所以在程式中出現a++=10,(a++)++,++(a++)

等試圖改變後置

++的值,是錯誤(編譯錯誤)的

前置及後置++

的用法

1.遇到逗號結束:

如:int a=10;

int c=(a++,++a,a++);

printf("%d\n",c);

在vc6

中列印c

的值為12,

這裡的(a++,++a,a++);

為逗號表示式,從左向右運算,遇逗號後置

++進行加法運算,運算後表示式為(

10,12,12);

所以c的值為12 2.

遇到;結束:

printf("%d %d %d \n",a++,++a,a++);  列印

11 11 10

所有的函式引數屬於一條語句,不是逗號表示式,從右向左入棧 3.

在巨集中的使用

int a=10;

int b=10;

#define return_value1(a,b) (a++>b?a++:b)

#define return_value2(a,b) (++a>b?a++:b)

int c=0;

c=return_value1(a,b);

printf("%d\n",c);  列印10

c=0;

c=return_value2(a,b);

printf("%d\n",c);   列印11

4.在陣列中的使用

int array=;//10,12,12

這裡的表示式是逗號表示式,從左向右計算

容易出錯的地方

int a=10;

a++=10;

printf("%x\n",&a++);

(a++)++;

++(a++);

++a++;  //++從右向左結合,所以相當於

++(a++).

以上表示式均是錯的。

切記:內建型別產生的臨時量具有常性,而這裡的後置++

產生臨時量,所以不能為其賦值,取位址,或改變它的值。

printf("%d\n",a+++++b);

編譯錯誤,因為編譯器從左往右結合最長的有效運算子,a+++++b

經過編譯器結合後變為

a++ ++ +b

這顯然是錯的,

++單目運算子,所以運算時先掃瞄乙個運算元,而此時中間的

++掃瞄不到乙個運算元,所以出錯,應將表示式改為

printf("%d\n",a++ + ++b);

即可。

printf("%d\n",a-----b);理由同上。

前置及後置--

的使用與前置及後置

++的使用相類似,所以在這裡省略。

註明:這裡所有的情況都是在32

為作業系統下

32為編譯器下的情況

前置 和後置 過載

1 前置 過載時沒有引數 而後置 過載時有引數。不會使用其引數,僅僅是區分用。可以理解為前置 後面有引數了,所以不需要引數 i 對應 operator i 對應 operator int 2 前置 需要返回引用 因為過載自加運算子後可以返回物件的引用,以方便在表示式中連續使用。而後置 返回的不是引用...

過載 前置 與後置

過載 前置 與後置 不同於普通的雙目運算子 自增自減運算子 在過載的時候需要額外留意區分是前置式還是後置式。現行的處理方法是,作為成員函式的 前置 不接受任何引數,而後置 接受乙個int型別的引數,儘管沒什麼實際用途,但是卻為編譯器確定過載物件提供了幫助。除了區分的時候需要注意,他們的行為也是有所區...

pytest的前置後置

setup module teardown module 函式形式,前置動作 用例1 用例2 用例3 後置動作 setup function teardown function 函式形式,每個用例執行前後,都會執行前置後置,即前置動作 用例1 後置動作 前置動作 用例2 後置動作 setup cla...