【发布时间】:2021-12-29 09:22:13
【问题描述】:
#include <iostream>
using namespace std;
int main() {
int num=10;
int *ptr=NULL;
ptr=#
num=(*ptr)++; //it should increase to 11
num=(*ptr)++; //it should increase to 12 but im getting 10
//if i dont initialize num and just use (*ptr)++ it gives me 11
cout<<num<<endl;
return 0;
}
我想知道为什么会发生这种情况以及为什么我得到 10 作为输出。
【问题讨论】:
-
又一个证据证明了为什么在一个表达式中改变一个值两次是不好的。 :-)
-
请注意,在 C++17 之前,
num=(*ptr)++;表现出未定义的行为。编译器可能不会发现它,但替换为num = num++会生成 警告:使用 clang-cl 对 'num' [-Wunsequenced] 进行多次未排序的修改(使用 C++14 标准)。