C++primer[习题][第四章][11-20]

来源:互联网 发布:门户源码 编辑:程序博客网 时间:2024/06/05 16:58
  • 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() //正确,判断迭代器当前元素是否为空,然后迭代器自增。