【问题标题】:Is iter++->empty() a legal expression?iter++->empty() 是合法的表达式吗?
【发布时间】:2013-11-04 10:19:33
【问题描述】:

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

iteriteratorvectorstrings。

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

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

编辑

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

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

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

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

对吗?

【问题讨论】:

    标签: c++ post-increment


    【解决方案1】:

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

    问自己这个问题足以把它分成两个陈述:

    iter->empty();
    iter++;
    

    【讨论】:

    • 谢谢。我是 C++ 的新手。这是我的初级读物中的一个问题,考虑到评估规则的优先级、关联性和顺序,我真的很困惑。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      iter->empty();
      iter++;
      

      【讨论】:

        猜你喜欢
        • 2021-04-06
        • 2017-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多