4.1 105
4.2 (a) *(vec.begin())shiyong
(b) (*(vec.begin())) + 1
4.3 两个准则可以避免缺陷:
1. 不确定求值顺序时使用括号;
2. 如果改变了某个对象的值,在表达式其他地方不要再使用这个对象,例外:改变运算对象的子表达式本身是另外一个子表达式的运算对象,如*++iter。
4.4 91
4.5 (a)-86; (b)-18; (c)0; (d)-2。
4.6 if (i % 2)
4.7 当计算结果超出该类型所能表示的范围就会产生溢出。
4.8 逻辑与和或运算符都按照先左侧后右侧的顺序求值,且仅当左侧运算对象无法确定表达式结果才计算右侧,即短路求值。
4.9 先检查cp是否为有效,再检查*cp是否为0,该表达式结果为true。
4.10 while (cin >> i && i != 42)
4.11 a > b && b > c && c > d
4.12 等价与 i != (j < k)
4.13 (a) i = 3; d = 3; (b) i = 3; d = 3.5;
4.14 if (42 = i) //非法,= 左侧必须是左值;
if (i = 42) //合法,但永远为真;应改为 i == 42
4.15 pi是指针类型,无法转换成ival的类型, 修改:
double dval; int ival; int *pi;
dval = ival = 0;
pi = 0;
4.16 (a) 赋值运算符优先级低,应该为:if ( (p = getPtr() ) != 0)
(b) 混淆相等运算符和赋值运算符,应该为 if (i == 1024)

2200

被折叠的 条评论
为什么被折叠?



