/*
练习4.20:
假设iter的类型是vector<string>::iterator, 说明下面的表达式是否合法。如果合法,表达式的含义是什么?如果不合法,错在何处?
(a)*iter++;
合法:
后置递增运算符的优先级高于解引用运算符,都满足右结合律。
iter向前移动一个位置,返回iter改变前的值,解引用iter改变之前的值,
(b)(*iter)++
不合法。解引用iter, 因为类型是string, 加1没有意义。
(c)*iter.empty()
成员选择点运算符优先级与函数调用运算符相同,都满足左结合律。
解引用运算符优先级较低,满足右结合律。
迭代器,没有empty成员。
不合法。
(d)iter->empty();
等价于:(*iter).empty();
合法
(e)++*iter;
优先级方面:前置递增运算符与解引用相同。结合律方面:均满足右结合律。
先对iter解引用,解引用的对象是string类型,执行自增运算没有意义。
不合法
(f)iter++->empty()
等价于:(*(iter++)).empty()
含义:iter++返回改变之前的值,iter向前移动一个位置,解引用改变之前的值,判断是否为空。
合法
*/
#include "TouWenJian_4.h"
int main()
{
return 0;
}
文章讨论了关于C++中vector<string>迭代器的各种操作,如(a)合法但含义是移动并返回原值,(b)非法因为string类型不支持自增,(c)非法因迭代器无empty成员,(d)合法等,强调了运算符优先级和合法性的区别。
33万+

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



