谨慎使用递增/递减运算符(C++)
2018-06-17 21:59:09来源:未知 阅读 ()
递增++和递减运算符--不论看起来还是用起来,都感觉是十分简单而又优雅的,然而其中却藏有无法受控制的陷阱,我们必须小心的避免错误的用法而出现的不可控的情况发生。
比方说:x = 2* x++ *(3 - ++x);这一语句,假设x=3,该表达式计算后,x的值是什么呢?
你可以这么分析:首先3 - ++x得到- 1,此时x的值为4;
然后2 * 4 * -1=--8; 此时x值为5?
然后x = -8
最终x的值为 - 8?
你在VS2017实现此表达式就会发现,得到的值是-7,为什么不是-8呢?在赋值后才进行了+1操作?
对,在VS2017的实现里,就是在赋值后才把++x的加一操作进行了。
其实在C++中,并没有对x何时才进行加一有硬性的规定(比如没有规定我们之前以为的x++在进行运算后就加一了)
在C++中,只保证了在顺序点前,完成所有的副作用评估,也就是说,只保证了在顺序点前,完成加一这一操作即可,所以在不同的系统上将会有不一样的情况发生,这是我们不可控的。
ps:
副作用:在计算表达式时对某些东西(如存储在变量中的值)进行了修改。
顺序点:程序执行过程中的一个点。(如在C++中,分号就是一个顺序点,任何完整表达式末尾都是一个顺序点。其他更多的顺序点在这里不作过多陈述)
完整表达式:不是另一个更大表达式的字表达式(如表达式语句中的表达式部分已经用作while循环中的检测条件的表达式)
所以终上所述,大家在用递增递减运算符时,请小心避免这一陷阱。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:C++简介
- C++ 在名称空间中使用using声明和using编译指令 2020-05-29
- 1.ffmpeg、ffplay、ffprobe命令使用 2020-05-11
- 关于使用ffmpeg的一些牢骚 2020-05-08
- G++编译链接的那些事!G++的特殊使用方法[常用] 2020-04-19
- c/c++ 使用valgrind检查内存泄漏 2020-04-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash