4.10 逗号运算符
逗号运算符(comma operator)含有两个运算对象,按照从左向右的顺序依次求值。和逻辑与、逻辑或以及条件运算符一样,逗号运算符也规定了运算对象求值的顺序。
对于逗号运算符来说,首先对左侧的表达式求值,然后将求值结果丢弃掉。逗号运算符真正的结果是右侧表达式的值。如果右侧运算对象是左值,那么最终的求值结果也是左值。
逗号运算符经常被用在for循环当中:
- vector<int>::size_type cnt = ivec.size();
- // 将把从size到1的值赋给ivec的元素
- for(vector<int>::size_type ix = 0;
- ix != ivec.size(); ++ix, --cnt)
- ivec[ix] = cnt;
这个循环在for语句的表达式中递增ix、递减cnt,每次循环迭代ix和cnt相应改变。只要ix满足条件,我们就把当前元素设成cnt的当前值。
4.10节练习
练习4.31:本节的程序使用了前置版本的递增运算符和递减运算符,解释为什么要用前置版本而不用后置版本。要想使用后置版本的递增递减运算符需要做哪些改动?使用后置版本重写本节的程序。
练习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) { /* . . . */ }
练习4.33:根据4.12节中以表(第166页)说明下面这条表达式的含义。
- someva lue ++x, ++y : --x, --y