p140~p144:
逗号运算符
1、特点:1)规定运算顺序,即由左向右。2)逗号运算符的真正结果是右侧表达式的值!
练习 4.31
使用后置的运算符会有额外的内存开销,
在这道题中使用前置和后置结果貌似是一样的,不需要改。。。
#include<iostream> using std::cout; using std::endl; #include<vector> using std::vector; int main() { vector<int> ivec(10); // 包含10个初始化的元素 vector<int>::size_type cnt = ivec.size(); for (vector<int>::size_type ix = 0; ix != ivec.size(); ix++, cnt--) { ivec[ix] = cnt; } for (int &x : ivec) { cout << x << endl; } return 0; } /* output: 10 9 8 7 6 5 4 3 2 1 */
练习 4.32
遍历ia中的元素。ix代表元素下标,ptr逐个存放对应元素的地址。
练习 4.33
someValue ? ++x, ++y : --x, --y;
先判断someValue的值,若是true,则执行:左侧的表达式,x、y的值依次加1,最后返回y,若是false,
则执行:右侧的表达式,x、y的值依次减1,最后返回y(左值)。
p141
类型转换
1、如果两种类型可以相互转换,那么它们就是关联的。
2、隐式转换。
3、运算对象被统一成最宽的类型。
4、整型提升:负责把小整数类型转换成较大的整型类型(int或者unsigned int)
练习 4.34
a 非布尔值转换成布尔类型。
b ival转化为float类型,然后相加,转化为double型;或者,fval和ival都转化为double型后相加。
c cval提升成int,相乘后的int值转换成double型。
练习 4.35
a 'a'提升成int,相加后得到的int转换为char。
b 都转化为unsigned类型,右侧结果也会转化为unsigned,最后转化为float类型。
c 整数型转化为浮点型,相乘后转换成左侧运算对象double类型。
d 统一成double型后转换为char类型。