C++17
有谁能解释一下
int number{5};
number = (number++) + 10;输出为15,而
int number {5};
number = (++number) + 10;输出为16?
发布于 2020-01-08 02:08:39
在采用P0145之前(在C++17中),第一个示例具有未定义的行为。什么事都有可能发生。
在C++11之前,两者都有未定义的行为。
在C++17中,neither has undefined behaviour。这并不意味着你想要写的是代码。
如果我们理解the difference between postfix and prefix increment,那么对输出的解释就很简单
案例1
number++:结果变为6,但表达式的计算结果为5。如果将expressionnumber中,则将number
案例2
++number:结果变为6,并且表达式的计算结果为6。将expressionnumber中时,会将number
发布于 2020-01-08 02:09:30
Pre increment递增该值并返回递增的结果。Post increment返回增量之前的值,然后递增变量。
发布于 2020-01-08 02:10:54
一元后增量在语句执行后执行。因此,首先将数字相加,然后数字是15。但在预增量情况下,首先是一元操作符,然后解析当前语句,并将结果计算为16。
更多信息:https://en.cppreference.com/w/cpp/language/operator_incdec
int number{ 5 };
01013C88 mov dword ptr [number],5
number = (number++) + 10;
01013C8F mov eax,dword ptr [number]
01013C92 add eax,0Ah
01013C95 mov dword ptr [number],eax
01013C98 mov ecx,dword ptr [number]
01013C9B add ecx,1
01013C9E mov dword ptr [number],ecx Assmebly代码显示两次相加
https://stackoverflow.com/questions/59633725
复制相似问题