@md5 有正确的答案,但我已经看到这个被滥用了很多次,我觉得有必要进一步评论。在几乎所有情况下,做这样的作业都是错误的。不是“不会编译”错误,而是“我不知道这是否是你真正想要做的”错误。它立即要求读者停下来认真思考你在做什么。如果有一种实用的方法可以避免在过程中进行分配,请使用它。创建一个临时变量,将评估分成几个阶段,无论如何。
现在,有时这实际上很有帮助。例如,这里有一些代码调用了一个非常慢的函数(canFreelyStop),但前提是它确实必须这样做。同时它正在对系统状态进行一些评估:
        //determine whether transport motor should be running and make it happen
        bool canStop = true;
        if (    m_requestErrorStop
             || (    !m_receiving                       // not receiving new items from upstream.
                  && ((canStop = canFreelyStop()) != 0) // can stop without damaging anything (!=0 to avoid compiler warning)
                )
           )
        {
           //ready to turn it off
           ...
        }
        else if (!canStop)
        {
           //only failed to stop due to documents in transit.  Wait a "cycle" and check again
           ...
        }
重写此代码以消除内部分配并非易事(它也依赖于短路评估)。这是我写过的唯一条件之一,其中内部分配实际上比替代方案更好。如果有人想要更改/调试此代码,我希望他们停下来认真考虑一下。