首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++17后增量操作

C++17后增量操作
EN

Stack Overflow用户
提问于 2020-01-08 01:58:45
回答 3查看 222关注 0票数 1

C++17

有谁能解释一下

代码语言:javascript
复制
int number{5};
number = (number++) + 10;

输出为15,而

代码语言:javascript
复制
int number {5};
number = (++number) + 10;

输出为16?

EN

回答 3

Stack Overflow用户

发布于 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。如果将expression
  • the结果(15)存储在number

中,则将number

  • ten相加

案例2

  • ++number:结果变为6,并且表达式的计算结果为6。将expression
  • the结果(16)存储在number

中时,会将number

  • ten相加
票数 9
EN

Stack Overflow用户

发布于 2020-01-08 02:09:30

Pre increment递增该值并返回递增的结果。Post increment返回增量之前的值,然后递增变量。

票数 0
EN

Stack Overflow用户

发布于 2020-01-08 02:10:54

一元后增量在语句执行后执行。因此,首先将数字相加,然后数字是15。但在预增量情况下,首先是一元操作符,然后解析当前语句,并将结果计算为16。

更多信息:https://en.cppreference.com/w/cpp/language/operator_incdec

代码语言:javascript
复制
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代码显示两次相加

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59633725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档