2

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

iter是s中iterator的一个。vectorstring

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

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

编辑

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

iter++->empty()应该是一样的(*iter++).empty()

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

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

那是对的吗?

4

3 回答 3

6

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

问自己这个问题足以将其分为两个陈述:

iter->empty();
iter++;
于 2013-11-04T10:21:22.290 回答
0

Assuming the iterator it is valid, the expression it++->empty() is well-defined

于 2013-11-04T10:24:09.317 回答
0

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

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

iter->empty();
iter++;
于 2013-11-04T10:30:05.150 回答