c++ - `++a=20;` 的意义何在?
问题描述
当我不小心尝试了这段代码时,我感到很困惑++a=20;
,这在 C 中是不允许的。但它可以工作,a
结果是 20。它是否与指针一起工作?
#include<iostream>
using namespace std;
int main()
{
int a=10;
++a=20;
cout<<a<<endl;
return 0;
}
mov DWORD PTR [rbp-4], 10
add DWORD PTR [rbp-4], 1
mov DWORD PTR [rbp-4], 20
解决方案
简短回答:毫无意义
让我们阅读汇编代码。
mov DWORD PTR [rbp-4], 10
为整数变量 a 分配了 4 字节(32 位)。因此它位于 [rbp-4] 中。此代码只是将其值分配给 10。现在 a = 10。
add DWORD PTR [rbp-4], 1
相当于在 a 上加 1
这可以是两者a++
,也可以是++a
。但是,它们略有不同。前者返回 a 的值,然后将其递增。后者增加 a 的值,然后返回它。
mov DWORD PTR [rbp-4], 20
它相当于 a = 20。
所以这些步骤实际上是这样的:
a = 10
a++
a = 20
这就是为什么 a 最后等于 20 的原因。
推荐阅读
- python - 为每列的出现但相对于另一列生成计数?
- python - 用另一个具有重复索引的数据框更新数据框
- asp.net-core - 为什么 Razor 页面脚手架对索引、详细信息和删除页面使用 HTML 帮助程序(而不是标记帮助程序)?
- sql-server - SUM() 将计算多少次?
- angularjs - AngularJs - 指令观察函数中的 if() 条件不起作用
- karate - 空手道 - 有没有办法在 XML 请求中保留(或添加)DTD
- java - 如果我需要在开始时评估条件,有没有办法避免 while(true) ?
- python - 如何在 PythonOperator Airflow 中调用返回值?
- cordova - @ionic-native/network 模块的问题
- scala - 将惰性值作为函数或方法参数传递而不对其进行评估?