习题4-31:
参照P132 4.5节中的建议:
"前置版本的递增运算符避免了不必要的工作,它把值加1后直接返回改变了运算对象。与之相比,后置版本需要将原始值存储下来以便于返回这个未修改的内容,如果我们不需要修改前的值,那么后置版本的操作就是一种浪费"
for(init;condition;increment):expression 语句中,首先执行init,判断condition,执行expression,然后increment;
程序:
void main()
{
vector<int> ivec(10,0);
vector<int>::size_type cnt = ivec.size();
for (vector<int>::size_type ix = 0; ix != ivec.size(); ix++, cnt++)
ivec[ix] = cnt;
}
习题4-32
遍历数组;ix为下标,ptr为指针;
习题4-33
逗号运算符的优先级低于所有运算符,所以先运行?:语句,最后运行--y
someValue?++x,++y:--x,--y=(someValue?++x,++y:--x),--y
习题4-34
a) fval:float转化为bool
b) ival 由int转化为float,相加后结果由float转化为double;
c) cval由char转化为int,乘积由int转化为double;
习题4-35
a)'a'先转化为int,求得的和再转化为char;
b)注意:c++默认小数为double型,1.0为double型,所以ival和ui转化为double,赋值时double转化为float;
c)ui转化为float,然后乘积由float转化为double;
d)ival转化为float,ival+fval其和由float转化为double,double最后转化为char;
习题4-36
i*=static_cast<int>(d);
习题4-37
(a)pv=const_cast<string *>ps //void *可以存放任意类型的地址 ps转化为非常量
pv=static_cast<void *>(const_cast<string *>ps ) ps转化为非常量,然后转化为void*型
(b)i=static_cast<int> (*ps);
(c)pv=static_cast<void *> (&d);
(d)pc=reinterpret_cast<char *>(pv) or pc = static_cast<char *>(pv);
习题4-38
首先计算int型出发j/i,然后将int型转化为double型