假设iter为vector<string>::iterator类型的变量,iter++ ->empty()是先调用函数再加加 还是后调用函数再加

写出理由谢谢,,... 写出理由 谢谢,, 展开
 我来答
果建翼
2011-06-08 · TA获得超过7923个赞
知道大有可为答主
回答量:1684
采纳率:0%
帮助的人:2433万
展开全部
1.先调++运算符,自增,但返回的是++前的迭代器位置
2.对++前的迭代器位置调用empty()函数。

也就是说实际上你并没有调用iter上的empty()函数,你调用的是等价于++前的iter的另一个临时迭代器上的empty()函数,而此时iter已经自增过了。
追问
你确定++ 运算符优先级比-> 高?
追答
这个和运算符优先级有什么关系?当一个表达式存在多种结合可能性的时候才按运算符优先级来决定结合顺序,而你这个是iter++ ->empty(),只有一种结合可能性,iter只能和++结合,不然还能和别的什么东西结合?总不能“越过”++和后面的->结合吧?
除非是++iter->empty()这种前置自增写法,iter既可以和前面++结合也可以和后面->结合,这时候才会存在运算符优先级的问题,这种情况下的确先->后++。但你这个后置自增写法则根本不存在运算符优先级的问题,iter只可能和++结合,它身边没别的运算符了。

你要是不信的话自己写一个简单的class测试下就行了,重载++(int)和->操作符,在其中cout,就能看出哪个先哪个后了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式