为什么赋值运算符不是序列点?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (12)

operator =不是序列点?在C和C++中都有,但很难想到一个反例。

提问于
用户回答回答于

一般来说,事情需要一个理由序列点。他们不需要理由作为序列点,这是默认的。

例如,&&由于短路行为,必须是序列点:如果左侧为假,则为右侧。(这不仅仅是优化;右侧可能会产生副作用,并且/或取决于左侧是否为真,如ptr && ptr->data)。因此,必须首先对左手侧进行评估,然后再对右侧进行评估,以确定是否应该对右侧进行评估。

用户回答回答于

某种程度上,运算符=(可以由工程师(也就是用户定义的操作符=用于类类型)定义)只是函数调用的语法糖。因此,它具有与函数调用相同的“序列点”语义。

如果我们采用的是内置类型,那么我认为这是一件好事。

扫码关注云+社区