iter ++ - > empty()是一个合法的表达吗?

时间:2013-11-04 10:19:33

标签: c++ post-increment

iter++->empty()是合法表达吗?

iteriteratorvector的{​​{1}}。

我在问,因为考虑运算符的优先级string->应该在后缀增量之前,但我真的不知道如何对操作数进行分组。

在我的编译器上它起作用(表达式产生第一个字符串的()结果,empty()指向第二个字符串)但我仍然想知道它是否是未定义的行为。

修改

我刚刚找到解决方案(我认为):

iter应与iter++->empty()

相同

因此,考虑到关联性和优先级规则,分组应该是:

(*iter++).empty()

这是对的吗?

3 个答案:

答案 0 :(得分:5)

这是合法的,但不要这样做。

问问自己这个问题是足够的理由将其分为两个陈述:

iter->empty();
iter++;

答案 1 :(得分:0)

假设迭代器it有效,表达式it++->empty()定义明确

答案 2 :(得分:0)

假设iter->empty()是有效的陈述,答案是肯定的。后增量运算符不会更改iter的类型,只需在执行empty()方法后递增它。

但是,我建议将其分成两个语句,因为(特别是后)增量语句通常会使代码不太清晰。那么为什么不去寻找:

iter->empty();
iter++;