C++ 是国际热核实验堆++-&燃气轮机;empty()是合法表达式吗?
C++ 是国际热核实验堆++-&燃气轮机;empty()是合法表达式吗?,c++,post-increment,C++,Post Increment,iter++->empty()是合法表达式吗 iter是字符串的向量的迭代器 我这样问是因为考虑到操作符的优先级,->和()都应该在后缀增量之前,但我真的不知道操作数应该如何分组 在我的编译器上它可以工作(表达式为第一个字符串生成empty()结果,并且iter指向第二个字符串),但是我仍然怀疑它是否是未定义的行为 编辑 我刚刚找到了解决方案(我认为): iter++->empty()应与(*iter++)相同。empty() 因此,考虑到关联性和优先规则,分组应为: ((*(iter++).e
iter++->empty()是合法表达式吗
iter
是字符串的向量的迭代器
我这样问是因为考虑到操作符的优先级,->
和()
都应该在后缀增量之前,但我真的不知道操作数应该如何分组
在我的编译器上它可以工作(表达式为第一个字符串生成empty()
结果,并且iter
指向第二个字符串),但是我仍然怀疑它是否是未定义的行为
编辑
我刚刚找到了解决方案(我认为):
iter++->empty()
应与(*iter++)相同。empty()
因此,考虑到关联性和优先规则,分组应为:
((*(iter++).empty)()
是这样吗?这是合法的,但不要这样做
问你自己这个问题就足以把它分成两种说法:
iter->empty();
iter++;
这是合法的,但不要这样做
问你自己这个问题就足以把它分成两种说法:
iter->empty();
iter++;
假设迭代器it
有效,表达式it++->empty()
定义良好假设迭代器it
有效,表达式it++->empty()
定义良好假设iter->empty()
是有效语句,答案是肯定的。增量后运算符不会更改iter
的类型,只是在执行empty()
方法后对其进行增量
但是,我建议将其分为两个语句,因为(尤其是后)增量语句通常会使代码不那么清晰。那么,为什么不去:
iter->empty();
iter++;
假设iter->empty()。增量后运算符不会更改iter
的类型,只是在执行empty()
方法后对其进行增量
但是,我建议将其分为两个语句,因为(尤其是后)增量语句通常会使代码不那么清晰。那么,为什么不去:
iter->empty();
iter++;
非常感谢。我是一个C++新手。这是我初级读物中的一个问题,考虑到评估规则的优先级、关联性和顺序,我真的很困惑。谢谢。我是一个C++新手。这是我初级读物中的一个问题,考虑到评估规则的优先级、关联性和顺序,我真的很困惑。