谨慎使用递增-递减运算符(C++)
来源:互联网 发布:linux安装rz sz 命令 编辑:程序博客网 时间:2024/06/05 14:25
递增++和递减运算符--不论看起来还是用起来,都感觉是十分简单而又优雅的,然而其中却藏有无法受控制的陷阱,我们必须小心的避免错误的用法而出现的不可控的情况发生。
比方说: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循环中的检测条件的表达式)
所以终上所述,大家在用递增递减运算符时,请小心避免这一陷阱。
阅读全文
0 0
- 谨慎使用递增-递减运算符(C++)
- 递增和递减运算符
- 递增和递减运算符
- (22)赋值运算符、递增和递减运算符
- 递增运算符&&递减运算符
- 35. PHP 递增/递减运算符
- C++ 递增/递减运算符和指针
- 运算符——递增++和递减--
- 实现前置与后置递增(递减)运算符的重载
- 第四章 4.5 递增和递减运算符
- 【C++学习笔记】递增/递减运算符和指针
- 递增、递减运算符位于变量前后的区别
- (13)递增递减运算符 (14)字符串运算符 (15)赋值运算符 (16)switch case语句
- javascript一元操作符(递增,递减)
- C中的指针(递增,递减,相加,相减)
- 关于c语言递增(递减)的深入理解
- php递增、递减运算的理解
- javascript一元操作符(递增、递减)使用示例
- MyBatis(三)增删改查--基于接口
- C/C++ %s %d %u 基本概念与用法
- hibernate.hbm2ddl.auto配置详解
- Jquery插件之Autocomplete
- 树剖
- 谨慎使用递增-递减运算符(C++)
- Hibernate使用中关于generator标签中的值的选择
- 详述 GitHub 中声明 LICENSE 的方法
- ubuntu15.10 安装XX-Net 3.3.6
- MIUI系统在Android开发过程中无日志解决
- 欢迎使用CSDN-markdown编辑器
- java for Web学习笔记之Servlet的使用及注意事项
- 在JAVA中使用HttpURLConnection发送POST请求
- 食品安全承诺书