- 4.11
a>b && b>c && c>d;
- 4.12
i != j < k;
優先級 ‘<’ > ‘!=’ 故先判斷 j 與 k 的大小關係, 結果爲true或者false,轉化爲整數則爲1或0,再與 i 比較,最終結果是bool值。
- 4.13
int i; double d;
a) d = i = 3.5; // i = 3, d = 3.0。
b) i = d = 3.5; // d = 3.5, i = 3。
- 4.14
if (42 = i) // 報錯。”=”號操作值必須爲左值。
if (i = 42) // 正確。
- 4.15
double fval; int ival; int *pi;
dval = ival = pi = 0;
錯誤,pi是指針。應改爲:
pi = 0; dval = ival = 0;
- 4.16
if (p = getPtr()!=0) // if ((p = getPtr()) != 0)
if (i = 1024) // if (i == 1024)
- 4.17
前置遞增運算符將對象本身作爲左值返回,後置遞增運算符將對象原始值副本作爲右值返回。
- 4.18
從第二個元素開始輸出,並會取值到v.end(),結果未定義。
- 4.19
ptr != 0 && *ptr++ //先判斷ptr是否爲空指針,如果非空並且當前指向的元素也爲真,則將ptr指向下一個元素。
ival++ && ival //判斷ival的值爲真,並且判斷(ival+1)的值爲真。
vec[ival++] <= vec[ival] //錯誤,C++並沒有規定<=左右的求值順序,應改爲vec[ival] <= vec[ival+1]。
- 4.20
*iter++ //正確,返回迭代器指向元素,然後迭代器自增。
(*iter)++ //錯誤,vector的元素爲string類型,沒有++操作。
*iter.empty() //錯誤,’.’運算符優先級高於’*’運算符,iter沒有empty函數。
iter->empty() //正確,判斷迭代器當前元素是否爲空。
++*iter //錯誤,string類型沒有++操作。
iter++->empty() //正確,判斷迭代器當前元素是否爲空,然後迭代器自增。