C++primer[習題][第四章][11-20]

  • 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() //正確,判斷迭代器當前元素是否爲空,然後迭代器自增。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章