
使用软件:vs2019(其他编译器可能有所不同)
前言:众所周知,a++为先取值再自增,++a为先自增再取值,但仅通过两句话并不好理解其在编译器中的实际运行逻辑,笔者因此进行实验得出了其背后运行逻辑,若有错误/遗漏欢迎指出/补充
先放结论:a++:先取a初始值为值参与本行的运算,本行结束后,a进行自增
++a:先执行本行所有自增操作(无论前后缀),再取自增结果为值参与本行运算
节省时间版: 详细解说版: 第一步:验证i++均取 i 初始值参与运算解析:a = 10+10+10+10,输出40,在该语句中,i++取初始值10为值参与运算。i 经过4次自增最后输出14。
第二步:将两个i++改为++i,验证++i的执行方式为先自增(整行)后取值解析:a = 14+14+10+10,输出48,在该语句中,共有4个自增运算符,++i 先在初始值10的基础上进行4次自增得到结果14,并以此结果参与运算,而 i++ 取i的初始值10为值参与运算。
第三步:将赋值对象由a改为i,验证i++是在语句结束后执行解析:i = 14+14+10+10,输出50(而不是48),在该语句中,共有4个自增运算符,++i 先进行4次自增得到结果14,并以此结果参与运算,而 i++ 取i的初始值10为值参与运算,此时 i 值为48 ;因为语句中存在2个i++,语句结束后 i 执行2次自增,最终输出结果为48+2=50。
第四步:将1个++i替换为i++,验证上述理论是否正确解析:i = 14+10+10+10,在该语句中,输出47(而不是44),共有4个自增运算符,++i 先进行4次自增得到结果14,并以此结果参与运算,而 i++ 取i的初始值10为值参与运算,此时 i 值为44;因为语句中存在3个i++,语句结束后 i 执行3次自增,最终输出结果为44+3=47。
综上所述在vs2019中
a++:先取a为值参与本行的运算,本行结束后,a进行自增
++a:先执行本行所有自增操作(无论前后缀),再取自增结果为值参与本行运算