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

Is iter++->empty() a legal expression?

本文关键字:表达式 一个 gt empty iter++-      更新时间:2023-10-16

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

iterstring s的vectoriterator

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

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

编辑

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

iter++->empty()应与(*iter++).empty()相同

因此,考虑到结合性和优先规则,分组应为:

(((*(iter++)).empty) ())

这是对的吗?

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

问自己这个问题足以将其分为两句话:

iter->empty();
iter++;

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

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

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

iter->empty();
iter++;
相关文章: