当v有副作用时,其实v+=e不等于v=v+e

计算v+=e只会求一次v的值,而计算v=v+e则会求两次v的值。在后一种情况下,对v求值可能引起的任何副作用也都会出现两次。

a[i++]  +=  2;   //i只会自增一次

如果用=代替+=,变成:

a[i++]  = a[i++] + 2;

//i的值在别处被修改和使用了,因此上述语句的结果是未定义的。i的值可能会自增两次,无法确定发生了什么。

(通常我们不希望运算符改变它们的操作数,数学中的运算符就是如此。表达式i+j不会改变i或j的值,只是计算出i+j的结果。

大多数C语言运算符不会改变操作数的值,但是也有一些会改变。由于这类运算符所做的不再仅仅是计算出值,所以称它们有副作用(side effect)。如赋值运算符)

子表达式的求值顺序------C语言没有规定子表达式的求值顺序

像  c = (b=a+2) - (a=1);//执行结果是未定义的,表达式(b=a+2) - (a=1),是先计算(b=a+2)还是(a=1)没有专门规定,由编译器决定,而结果又依赖于求值顺序.

C语言中只有四个运算符&&,||,?:和,号存在规定的求值顺序。&&,||首先对左侧操作数求值,只在需要时才对右侧操作数求值。运算符?:有三个操作数,在a?b:c中,操作数a首先被求值,根据a的值再求操作数b或c的值。而逗号运算符,首先对左侧操作数求值,然后该值被“丢弃”,再对右侧操作数求值。

注:

分隔函数参数的逗号并非逗号运算符。例如,x和y在函数f(x,y)中的求值顺序的未定义的,而在函数g((x,y))中却是确定的先x后y的顺序。在后一个例子中,函数g只有一个参数,这个参数的值是这样求得的。先求x,然后x的值被“丢弃”,接着求y的值)

v+=e不等于v=v+e相关推荐

  1. vector<int> v, vector<int> v(n) 与vector<int> v[n]的区别

    一.vector<int> v表示声明一个容器v,并且不给他预定存储空间. 运行: vector<int> v;cout << v.size(); 输出为: 0 二 ...

  2. 抖音蓝V如何认证,蓝V号与普通号的区别?

    抖音蓝V如何认证,蓝V号与普通号的区别? 先说说抖音蓝V号和普通号的区别,两者之间最大的区别就是:抖音蓝V比普通号拥有更多的商业功能特权,更具有商业价值. 抖音蓝V有哪些功能特权呢? 1.外观功能 ( ...

  3. docker运行redis:windows环境运行挂载目录的正确写法、-v挂载data目录、-v挂载redis.conf配置文件以及设置访问密码

    docker run -itd --name redis -v //f/DATA/docker-data/redis:/data -v //f/DATA/docker-data/redis:/etc/ ...

  4. oracle v rman status,RMAN 中V$ARCHIVED_LOG 中STATUS 为X 的文件处理

    记录一下[@more@] 今天发现RMAN 中V$ARCHIVED_LOG 中STATUS 为"X" 的文件,想起是因为手动删掉错几个日志造成的,通过如下的方法把RMAN 中的记录 ...

  5. 要怎样申请抖音蓝V认证?详谈蓝V认证的步骤

    抖音现在是国内非常火的短视频软件,随着用户量的与日俱增,很多商家抓住了商机,开始在抖音宣传自己的商品.而抖音蓝V认证则是快速提升企业品牌知名度的一种渠道,但很多朋友不知道怎么申请蓝V认证,今天就给大家 ...

  6. 025 导数的四则求导法则之u+v、uv、u/v求导

    025 导数的四则求导法则之u+v及uv u/v求导

  7. 自媒体运营之:微博认证怎么弄黄v?(个人橙v认证)

    今天跟大家聊一下自媒体运营中关于微博的黄V认证怎么做的问题,微博的用户量很大并且用户活跃度也很高,大家平时也会发现很多热门话题都是从微博火起来的,那么对于我们自媒体运营来说,怎么样去做好微博的运营呢? ...

  8. 商业 v. s. 自由 ——W*ndows v. s. 现代UNIX

    导读 "天下没有免费的午餐." 这句话只说对了一半.对于软件业,或者更准确一点,自由软件业,这并不一直是对的. 商业软件公司正在控制着我们--普通计算机用户甚至专业的程序员--的大 ...

  9. 学习笔记 -- 四元数:$v‘= qvq^{-1}$,证明v‘为虚四元数

最新文章

  1. PHP学习方向-进阶(二)
  2. 080_html5 Canvas和SVG
  3. 我的算法学习(一)----数组的全排列
  4. Mac升级自带ruby方法
  5. 解决toolbar左边空出一部分的问题
  6. Tensor的索引与切片
  7. 日立hgp电梯mcub03主板原理图
  8. matlab里面的取整函数
  9. 底量超顶量超级大黑马指标源码_清华女教授忠言:只要出现“底量超顶量”走势,后期必有暴走趋势...
  10. SQL省市区三级表 脚本
  11. 看风云变幻,自云淡风轻
  12. 安装卸载Xftp时,遇到的1605和1628问题
  13. 华为服务器进入系统怎么退出安全模式,华为手机怎么进入和退出安全模式?华为手机进入安全模式按哪个键...
  14. MPU6050的dmp代码移植的过程--转
  15. 最新火狐手机浏览器如何通过firefox修改UA
  16. js打印pdf 使用Adobe reader 打印pdf
  17. 软件比人可靠——错误管理软件TestDirector
  18. Day37.数据库的几个重要概念
  19. java 16进制工具
  20. 剑与远征服务器维护,剑与远征:海岛版本入坑须知注意点,少走弯路!

热门文章

  1. 小说分销运营赚不赚钱就在这3个问题了!
  2. Ubuntu安装360浏览器
  3. uc浏览器电脑版官方版
  4. Oracle项目管理系统之质量监督检查管理
  5. 涿州蓝天计算机学校,涿州职教中心计算机专业高考班人才培养方案.doc
  6. matlab 图像的灰度值翻转
  7. 论文笔记-VulDeeLocator: A Deep Learning-based Fine-grained Vulnerability Detector
  8. statement和preparedment的区别
  9. python实现网页微信登陆_django 微信网页授权登陆的实现
  10. bp神经网络是用来干嘛的,神经网络bp是什么意思