Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是国际热核实验堆++-&燃气轮机;empty()是合法表达式吗?_C++_Post Increment - Fatal编程技术网

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++新手。这是我初级读物中的一个问题,考虑到评估规则的优先级、关联性和顺序,我真的很困惑。