gpt4 book ai didi

C++:为什么 iter++->empty() 合法?

转载 作者:行者123 更新时间:2023-12-02 02:27:05 27 4
gpt4 key购买 nike

C++ Primer, 5e 的练习 4.20 询问表达式 iter++->empty(); 是否成立是合法的。假设itervector<string>::iterator .

这个表达式是合法的。我用gcc编译了它,答案为another question Stack Overflow 上已经解决了这么多。然而,我很困惑为什么它是合法的。

This answer对于类似的问题,给出以下作为一对等价的表达式:

iter->empty();
iter++;

我书中的运算符优先级表列出了 ->比后缀 ++ 具有更高的优先级运算符(operator)。这与上面等效代码中的显式操作顺序相匹配。然而,我习惯于看到运算符应用于它们旁边的任何内容。以->为例,我预计编译器会将其应用到 ++ (就其本身而言,没有 iter )并抛出错误。换句话说,我尝试将原始表达式括起来为 iter(++->empty()); ,这显然是非法的。

因此,C++ 似乎要求编译器以更复杂的方式解析表达式,而不仅仅是基于优先级和关联性的括号。是对的吗?如果有一种简单的方法可以解释这实际上是如何发生的,我想知道。

最佳答案

Per cppreference++-> 具有相同的优先级并具有从左到右的关联性。这意味着先执行 iter++,然后将 ->empty() 应用于 iter++ 的结果,即 iter(来自增量之前),因为它是后缀增量。

关于C++:为什么 iter++->empty() 合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65497257/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com