最近笔者在调试代码时发现自己在对++运算符的理解上不够深入,导致一个不应有的bug的出现。
在代码书中或课堂上我们都知道++i和i++在作为一个单独语句使用时没有区别,即相当于i=i+1; 而作为语句的一部分时,如a=++i; 和a=i++; ++i先执行加1操作,再执行赋值操作(因++在前),而i++是先执行赋值操作,再执行加1操作(因++在后)。但这种论述未将其中更深的运行机制讲出来,尤其是在if或while等判断语句中,下面对其进行探讨:
- 作为单独语句存在,如下面的两段代码:
上面的条件判断代码虽然是以单独语句出现,但编译器将其
等价于i++(或++i)>0
,故在第一段代码中先执行i>0判定,再执行i++,因此条件体里的代码不被执行;而在第二段代码中先执行i=i+1,再执行i>0,因此条件里代码会被执行。
- 作为语句的一部分存在,如下面的一段代码:
上面的代码中括号()的优先级比!=的优先级高,但编译器仍然将++运算符最后执行。即先执行赋值语句i=j,然后判定(i=3)!=4成立,最后执行j++,接下去执行条件体里代码。
综上可知当i++作为单独条件语句进行判定时,即使没有显示地声明与0的比较,编译器仍将加上与0的比较;当i++作为复合语句使用时,不管++是否在优先级更高的运算符中,++仍然最后才执行,即在当前所在语句操作执行之后。
分享到:
相关推荐
mfc110u.dll + msvcp11.dll +msvcr110.dll ;32/64位,全包含;mfc110u.dll + msvcp11.dll +msvcr110.dll ;32/64位,全包含;mfc110u.dll + msvcp11.dll +msvcr110.dll ;32/64位,全包含;mfc110u.dll + msvcp11.dll ...
瀚洋直播v2.2.69直播+抖音短视频+直播带货+朋友圈动态+远程礼物+全场飘屏.txt
compat-libstdc++-33-3.2.3-69.el6.i686和compat-libstdc++-33-3.2.3-69.el6.x86_64 rpm包
安装虚拟机需要使用的包,可能由于您的版本不同需要及时下载改rpm包,进行更新,解决bug
compat-libstdc++-33-3.2.3-69.el6.i686.rar
compat-gcc-32-3.2.3-69.el6.src.rpm 安装orcale时使用到的依赖
compat-libstdc++-33-3.2.3-69.el6.x86_64
cef_binary_95.7.18+g0d6005e+chromium-95.0.4638.69_win64支持h264
compat-libstdc++-33-3.2.3-69.el6.x86_64.rpm
通过系统性的规划和执行,方案能够分析问题的根本原因,提供可行的解决方案,并引导实施过程,确保问题得到合理解决。 目标达成: 方案通常与明确的目标相关联,它提供了一种达成这些目标的计划。无论是企业战略、...
69.java找素数.zip69.java找素数.zip69.java找素数.zip69.java找素数.zip69.java找素数.zip69.java找素数.zip69.java找素数.zip69.java找素数.zip69.java找素数.zip69.java找素数.zip69.java找素数.zip69.java找素数...
62769同城社区 6.6.69+商家优惠券+分销
三次样条函数 MATLAB程序 三次样条函数S(1)= -6 3 2 8 14 0.20820 10 t - 3.1543 t + 0.15929 10 t - 0.26815 10 在区间[5050357.056000,5052919.512000]内 三次样条函数S(2)= -7 3 2 7 13 ...
compat-libstdc++-33-3.2.3-69.el6.i686.rpm compat-libstdc++-33-3.2.3-69.el6.x86_64.rpm elfutils-libelf-devel-0.152-1.el6.i686.rpm elfutils-libelf-devel-0.152-1.el6.x86_64.rpm gcc-4.4.7-11.el6.x86_64....
compat-libstdc++-33-3.2.3-69.el6.i686.rpm libstdc++-3.4.6-3.1.i386.rpm compat-libstdc++-33-3.2.3-69.el6.x86_64.rpm pdksh-5.2.14-1.i386.rpm glibc-2.3.4-2.41.i686.rpm unixODBC-2.2.11-7.1.i386.rpm libaio...
jcef_binary_95.7.18+g0d6005e+chromium-95.0.4638.69_win64支持h264
这项任务通常要求学生运用所学专业知识,通过独立研究和创新,完成一个实际问题的解决方案或者开展一项有价值的项目。 首先,毕业设计的选择通常由学生根据个人兴趣、专业方向以及实际需求来确定。学生需要在导师的...
最新版linux apache-tomcat-8.5.69.tar.gz最新版linux apache-tomcat-8.5.69.tar.gz
boostdesc_bgm.i: No such file or directory boostdesc_bgm.i boostdesc_bgm_bi.i boostdesc_bgm_hd.i boostdesc_lbgm.i boostdesc_binboost_064.i boostdesc_binboost_128.i boostdesc_binboost_256.i vgg_...