iter++->empty()
是合法表达吗?
iter
是iterator
个vector
的{{1}}。
我在问,因为考虑运算符的优先级string
和->
应该在后缀增量之前,但我真的不知道如何对操作数进行分组。
在我的编译器上它起作用(表达式产生第一个字符串的()
结果,empty()
指向第二个字符串)但我仍然想知道它是否是未定义的行为。
修改
我刚刚找到解决方案(我认为):
iter
应与iter++->empty()
因此,考虑到关联性和优先级规则,分组应该是:
(*iter++).empty()
这是对的吗?
答案 0 :(得分:5)
这是合法的,但不要这样做。
问问自己这个问题是足够的理由将其分为两个陈述:
iter->empty();
iter++;
答案 1 :(得分:0)
假设迭代器it
有效,表达式it++->empty()
定义明确
答案 2 :(得分:0)
假设iter->empty()
是有效的陈述,答案是肯定的。后增量运算符不会更改iter
的类型,只需在执行empty()
方法后递增它。
但是,我建议将其分成两个语句,因为(特别是后)增量语句通常会使代码不太清晰。那么为什么不去寻找:
iter->empty();
iter++;