练习4.31、4.32、4.33

4.31:本节的程序使用了前置版本的递增运算符和递减运算符,解释为什么要用前置版本而不用后置版本。要想使用后置版本的递增递减运算符需要做哪些改动?使用后置版本重写本节的程序。

Ans:根据情况而定,若使用后置版本,那么如果只是使用运算对象的原始值而不需要使用递增后的值,那么后置版本就会继续递增运算对象的值,出现额外的操作,这样降低了程序的性能。

4.32:解释下面这个循环的含义。

constexpr int size = 5;

int ia [size]={1,2,3,4,5};

for(int *ptr=ia,ix=0; ix!=size&& ptr !=ia+size;

++ix,++ptr)  {  /*....*/  }

Ans:定义一个指针指向数组的首元素,然后定义一个ix等于0,接着判断若ix的值小于size则判断指针ptr是否指向数组ia的最后一个元素的下一个位置,若不是则,条件为真,执行下面的语句,然后再进行ix+1,ptr+1的操作,遍历数组的下一个元素。

4.33:根据4.12节中的表说明下面这条表达式的含义。

someValue  ?  ++x  ,  ++y : --x,  --y

Ans:由于逗号运算符的优先级最低,然后是条件运算符,最后是递增递减运算符,所以表达式等价于:( someValue  ?  ++x  ,  ++y : --x) ,   --y  也就是说若条件为真则执行++x,++y,若为假,则执行--x,--y。

原文地址:https://www.cnblogs.com/Dark-King/p/9448285.html