C++ 以下代码的输出是什么?

C++ 以下代码的输出是什么?,c++,C++,代码的输出是什么 inta=3,b=4 ++a*=++b cout在您的特定编译器上的特定情况下,似乎首先a递增为4,b递增为5,然后a*=b执行,a变为20(4*5)。然而,其他编译器可能会给出不同的结果,因为这不是评论中提到的定义行为您的理解是错误的。您的代码在没有中间序列点的情况下修改a两次。因此,您的代码具有未定义的行为。有关详细解释,请参见赵的链接。@john-这是一种正式的说法,表示编译器不必处理此类****。由于缺少序列点,这是未定义的行为。4*5=20是合理的;但是,您不知道++

代码的输出是什么

inta=3,b=4
++a*=++b

cout在您的特定编译器上的特定情况下,似乎首先a递增为4,b递增为5,然后a*=b执行,a变为20(4*5)。然而,其他编译器可能会给出不同的结果,因为这不是评论中提到的定义行为

您的理解是错误的。您的代码在没有中间序列点的情况下修改
a
两次。因此,您的代码具有未定义的行为。有关详细解释,请参见赵的链接。@john-这是一种正式的说法,表示编译器不必处理此类****。由于缺少序列点,这是未定义的行为。4*5=20是合理的;但是,您不知道++a的结果是什么,所以它是未定义的。@Infinity-请查看本教程的初学者部分。你肯定需要一本好书来读。@BoPersson非常感谢你,男人:)这是对观察到的行为的合理解释。不过,一般来说,行为是未定义的。@Martinsos当你有未定义的行为时,没有什么“总是发生”。该代码不是有效的C++,没有从该代码预期的行为。code>c=++a*++b
可以像你说的那样工作,但是上面的代码不是这样的,因为a被修改了两次。这就是问题所在。@InfinitySignal这是未定义的行为,你的理解是不完整的。联想性与此无关。@Martinsos现在我觉得你的答案很好,我去掉了我的反对票。我在措辞上加了一点;我想提前强调,OP提到的结果是针对OP的。