【发布时间】:2020-04-01 19:48:40
【问题描述】:
对于相同的 c++ 代码,但在不同版本的 c++ 中,我得到了不同的答案 即 c++14 和 c++17
从 c++14 到 c++17 的变化是什么,因此我得到了不同的答案?
(与这个问题特别相关)
#include<iostream>
using namespace std;
int main()
{
int i = 1;
cout << i++ <<" "<< i-- << " " << i--;
return 0;
}
/*
* Output in c++17
* 1 2 1
*
* Output in c++14
* -1 0 1
*
*/
【问题讨论】:
-
这不是未定义的行为吗?
-
@DYZ 是的,它是 UB - 对变量
i的多个未排序修改。 -
是的。在同一命令中使用变量时更改变量是未定义的行为,结果无法预测。这种变化可能是因为编译器核心发生了变化。
-
cout << i++ <<" "<< i-- << " " << i--;在我看来就像undefined behaviour。所以你从来没有对任何特定的结果有任何合理的期望。 任何结果都是允许的。 -
@Yksisarvinen 已针对此运算符修复。只是作为规范的欺骗而关闭。