是否有充分的理由使operator =不是序列点?在C和C++中都可以。

我很难考虑一个反例。

最佳答案

按要求:

通常,需要将作为序列点的理由。他们不需要而不是成为序列点的理由;这是默认值。

例如,由于短路行为,&&必须是一个序列点:如果左侧为false,则不得对右侧求值。 (这不仅仅涉及优化;右侧可能会有副作用,并且/或者取决于左侧是否为真,如ptr && ptr->data一样。)因此,必须首先评估左侧,然后评估右侧-侧,以便查看是否应该对右侧进行评估。
=不存在此原因,因为,尽管双方都需要执行“评估”(尽管对双方的内容都有不同的限制:左侧必须是左值-l不适用代表“左”,顺便说一句;它代表“位置”,就像在内存中的位置一样(我们不能分配给临时或文字),哪一方先求值都没有关系,只要双方都是在实际分配之前进行评估。

关于c++ - 赋值运算符不是序列点的任何很好的理由?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4362501/

10-09 05:36