- 4.11
a>b && b>c && c>d;
- 4.12
i != j < k;
优先级 ‘<’ > ‘!=’ 故先判断 j 与 k 的大小关系, 结果为true或者false,转化为整数则为1或0,再与 i 比较,最终结果是bool值。
- 4.13
int i; double d;
a) d = i = 3.5; // i = 3, d = 3.0。
b) i = d = 3.5; // d = 3.5, i = 3。
- 4.14
if (42 = i) // 报错。”=”号操作值必须为左值。
if (i = 42) // 正确。
- 4.15
double fval; int ival; int *pi;
dval = ival = pi = 0;
错误,pi是指针。应改为:
pi = 0; dval = ival = 0;
- 4.16
if (p = getPtr()!=0) // if ((p = getPtr()) != 0)
if (i = 1024) // if (i == 1024)
- 4.17
前置递增运算符将对象本身作为左值返回,后置递增运算符将对象原始值副本作为右值返回。
- 4.18
从第二个元素开始输出,并会取值到v.end(),结果未定义。
- 4.19
ptr != 0 && *ptr++ //先判断ptr是否为空指针,如果非空并且当前指向的元素也为真,则将ptr指向下一个元素。
ival++ && ival //判断ival的值为真,并且判断(ival+1)的值为真。
vec[ival++] <= vec[ival] //错误,C++并没有规定<=左右的求值顺序,应改为vec[ival] <= vec[ival+1]。
- 4.20
*iter++ //正确,返回迭代器指向元素,然后迭代器自增。
(*iter)++ //错误,vector的元素为string类型,没有++操作。
*iter.empty() //错误,’.’运算符优先级高于’*’运算符,iter没有empty函数。
iter->empty() //正确,判断迭代器当前元素是否为空。
++*iter //错误,string类型没有++操作。
iter++->empty() //正确,判断迭代器当前元素是否为空,然后迭代器自增。
本文解析了C++中各类表达式的优先级与运算规则,包括条件、赋值、指针、迭代器等关键概念的使用场景及注意事项。通过具体示例说明了常见错误及其修正方法。
1万+

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



