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

写出理由 谢谢,,

1.先调++运算符,自增,但返回的是++前的迭代器位置
2.对++前的迭代器位置调用empty()函数。

也就是说实际上你并没有调用iter上的empty()函数,你调用的是等价于++前的iter的另一个临时迭代器上的empty()函数,而此时iter已经自增过了。追问

你确定++ 运算符优先级比-> 高?

追答

这个和运算符优先级有什么关系?当一个表达式存在多种结合可能性的时候才按运算符优先级来决定结合顺序,而你这个是iter++ ->empty(),只有一种结合可能性,iter只能和++结合,不然还能和别的什么东西结合?总不能“越过”++和后面的->结合吧?
除非是++iter->empty()这种前置自增写法,iter既可以和前面++结合也可以和后面->结合,这时候才会存在运算符优先级的问题,这种情况下的确先->后++。但你这个后置自增写法则根本不存在运算符优先级的问题,iter只可能和++结合,它身边没别的运算符了。

你要是不信的话自己写一个简单的class测试下就行了,重载++(int)和->操作符,在其中cout,就能看出哪个先哪个后了。

温馨提示:答案为网友推荐,仅供参考