【发布时间】:2013-08-04 07:54:36
【问题描述】:
我一直在寻找公式:a = (a + b) - (b = a) 它应该交换两个变量(或某些情况下的对象)。但是我用 C++ 和 php 对其进行了测试,这给了我不同的结果。
php:
$a = 10;
$b = 20;
$a = ($a + $b) - ($b = $a);
echo $a, " ", $b;
这打印20 10
C++
int a = 10;
int b = 20;
a = (a + b) - (b = a);
std::cout << a << " " << b;
这打印10 10
代码看起来一样但输出不同,我一直在考虑两个原因:
- C++ 代码正在编译,php 正在解释。
- 这个公式没有用,因为它会导致未定义的行为。
谁能解释一下,为什么在这种情况下 C++ 和 php 的输出不同?
【问题讨论】:
-
*.com/questions/949433/… - 你的 C++ 代码有未定义的行为。
-
你确定吗?我在我的编译器 (g++) 中复制/粘贴了您的代码,我得到“20 10”而不是“10 10”。
-
@leonm 如果行为未定义,这并不奇怪。
-
@leonm 我使用了 VS2008,它给了
10 10。所以可能是UB,不同的编译器可能以不同的方式处理代码,所以它只是确认它是UB。 -
我这里也试过compileonline.com/compile_cpp_online.php 结果是
20 10
标签: php c++ undefined-behavior