4.13 在下述語句中,當賦值完成後i和d的值分別是多少?
int i; double d;
d = i = 3.5;//i = 3,d = 3
i = d = 3.5;//i = 3, d = 3.5
4.14 執行下述if語句後將發生什麼情況?
if(42 = i){}//err 字面值是右值
if(i = 42){}//true
4.15下面的賦值是非法的,為什麼?應該如何修改?
double dval; int ival; int
*pi;
dval = ival = pi = 0;//pi為int * 不能轉換成int
dval = ival = *pi = 0;
4.16儘管下面的語句合法,但他們實際執行的行為可能和預期並不一樣,為什麼?應如何修改?
if(p = getptr() != 0){}//if(p == getptr() != 0){}
if(i = 1024){}//if(i == 1024){}
第四章 表示式 4 4 賦值運算子
賦值運算子的左側運算物件必須是乙個可修改的左值。賦值運算的結果是它的左側運算物件,並且是乙個左值。結果的型別就是左側運算物件的型別,如果賦值運算子的左右兩個運算物件型別不同,則右側運算物件將轉換成左側運算物件的型別。賦值運算子滿足右結合律 對於多重賦值語句中的每乙個物件,她的型別或者與右邊物件的型別...
第四章 運算子過載
目錄定義 重新定義運算子的運算 實質是函式過載,把含有運算子的表示式轉換成對運算子函式的呼叫 可以過載為普通函式 成員函式 友元函式 多次過載時,根據實參型別決定呼叫哪個運算子函式 等號只能過載為成員函式 賦值語句和初始化語句的等號 含義不同,初始化語句需要用建構函式實現 同類賦值注意點 可能包含指...
第四章 運算子的本質
陣列是存在於人們頭腦中的乙個邏輯概念,而編譯器其實並不知道有陣列這個東西,它所知道的,只是運算子,當遇到運算子的時候,編譯器只是簡單地把它轉換為類似 a i j 這樣的等價表示式,之所以是這種表示式,如前幾章所述,是因為c語言的陣列實現本質上是陣列的巢狀。由於這種等價關係的存在,會產生一些古零精怪的...