书写一条表达式用于测试4个值a、b、c、d的关系,确保a大于b、b大于c、c大于d。
a>b && b>c && c>d
假设i、j 和k 是三个整数,说明表达式 i != j < k 的含义。
这个表达式等于 i != (j < k)
。首先得到 j < k 的结果为 true 或 false,转换为整数值是 1 和 0,然后判断 i 不等于 1 和 0 ,最终的结果为 bool 值。
在下述语句中,当赋值完成后 i 和 d 的值分别是多少?
int i; double d;
d = i = 3.5; // i = 3, d = 3.0
i = d = 3.5; // d = 3.5, i = 3
执行下述 if 语句后将发生什么情况?
if (42 = i) // 编译错误。赋值运算符左侧必须是一个可修改的左值。而字面值是右值。
if (i = 42) // true.12 / 3 * 4 + 5 * 15 + 24 % 4 / 2
下面的赋值是非法的,为什么?应该如何修改?
double dval; int ival; int *pi;
dval = ival = pi = 0;
p 是指针,不能赋值给 int ,应该改为:
dval = ival = 0;
pi = 0;
尽管下面的语句合法,但它们实际执行的行为可能和预期并不一样,为什么?应该如何修改?
if (p = getPtr() != 0)
if (i = 1024)
条件判断总是为 true, 应该改为:
if ((p=getPtr()) != 0)
if (i == 1024)
说明前置递增运算符和后置递增运算符的区别。
前置递增运算符将对象本身作为左值返回,而后置递增运算符将对象原始值的副本作为右值返回。
如果132页那个输出vector对象元素的while循环使用前置递增运算符,将得到什么结果?
将会从第二个元素开始取值,并且最后对 v.end() 进行取值,结果是未定义的。
假设 ptr 的类型是指向 int 的指针、vec 的类型是vector、ival 的类型是int,说明下面的表达式是何含义?如果有表达式不正确,为什么?应该如何修改?
(a) ptr != 0 && *ptr++
(b) ival++ && ival
(c) vec[ival++] <= vec[ival]
<=
运算符两边的求值顺序,应该改为 vec[ival] <= vec[ival+1]
假设 iter 的类型是 vector::iterator, 说明下面的表达式是否合法。如果合法,表达式的含义是什么?如果不合法,错在何处?
(a) *iter++;
(b) (*iter)++;
(c) *iter.empty();
(d) iter->empty();
(e) ++*iter;
(f) iter++->empty();