gpt4 book ai didi

c++ - 复合赋值(乘法)

转载 作者:行者123 更新时间:2023-11-27 22:45:59 29 4
gpt4 key购买 nike

我最近学习了C++的基础知识。我发现了一些我不明白的东西。这是让我有点困惑的程序。

       #include <iostream>

using namespace std;

int main()
{
int m = 4, n;
n=++m*--m;
cout <<"m="<<m<<" and n="<<n<<"\n;
return 0;
}

输出为 m=4 和 n=16。 我以为 m=4,所以++m为5,--m为4, 那么n=5*4=20。 因此,m=4 和 n=20。 我认为我的是假的。所以我需要帮助。谢谢。

最佳答案

* 的操作数相对于彼此未排序。这意味着它们不仅可以按任何顺序进行评估;但如果每个操作数包含多个子步骤,则一个操作数的子步骤可能会与另一个操作数的子步骤交错。

这方面的一个例子可能是 (f() + g()) * (h() + i()) 。这四个函数可以按任何顺序调用——不需要 fg 一起调用,等等。

回到您的示例,以下两个子步骤相对于彼此没有顺序:

  • 将新值写入m,作为++m的一部分>
  • 阅读m,作为--m的一部分

当对同一个变量有两次无序操作(并且至少有一次是写操作)时,是undefined behaviour这意味着任何事情都有可能发生(包括意想不到的结果)。

关于c++ - 复合赋值(乘法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42887099/

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