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。