正确的参数进行了评估
2016-06-12 14:01
225 查看
在第三行中,x和y是递增/递减之前,他们的评价,所以他们的新值打印由cout。在第五行,一个原始值的临时副本(x = 6,y = 4)发送给cout,然后原来的x和y是递增的。这就是为什么从后缀式操作符的结果没有改变到下一行。
规则:有利于增量和预减后增量和后减量。前缀版本不仅更加高效,你就不太可能遇到奇怪的问题。
副作用
一个函数或表达式被称为有副作用,如果它修改某个状态(例如,在内存中的任何存储的信息),输入或输出,或调用其他功能,有副作用。
大部分的时间,副作用是有用的:
2
3
x = 5;
++x;
std::cout << x;
上面例子中的赋值操作符有改变永久的值的副作用。甚至在语句完成后,××将有值5。++运算符具有增加X X的输出具有修改控制台的副作用副作用。但是,副作用也会导致意想不到的结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
int add(int x, int y)
{
return x + y;
}
int main()
{
int x = 5;
int value = add(x, ++x); // is this 5 + 6, or 6 + 6? It depends on what order your compiler evaluates the function arguments in
std::cout << value; // value could be 11 or 12, depending on how the above line evaluates!
return 0;
}
C++没有定义在函数的参数进行评估。如果先对左参数进行了评估,这就成了一个添加(5,6),即11。如果对正确的参数进行了评估,这就成了一个调用(6,6),它等于12!请注意,这只是一个问题,因为一个参数的函数()有副作用。
这是另一个流行的例子:
规则:有利于增量和预减后增量和后减量。前缀版本不仅更加高效,你就不太可能遇到奇怪的问题。
副作用
一个函数或表达式被称为有副作用,如果它修改某个状态(例如,在内存中的任何存储的信息),输入或输出,或调用其他功能,有副作用。
大部分的时间,副作用是有用的:
2
3
x = 5;
++x;
std::cout << x;
上面例子中的赋值操作符有改变永久的值的副作用。甚至在语句完成后,××将有值5。++运算符具有增加X X的输出具有修改控制台的副作用副作用。但是,副作用也会导致意想不到的结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
int add(int x, int y)
{
return x + y;
}
int main()
{
int x = 5;
int value = add(x, ++x); // is this 5 + 6, or 6 + 6? It depends on what order your compiler evaluates the function arguments in
std::cout << value; // value could be 11 or 12, depending on how the above line evaluates!
return 0;
}
C++没有定义在函数的参数进行评估。如果先对左参数进行了评估,这就成了一个添加(5,6),即11。如果对正确的参数进行了评估,这就成了一个调用(6,6),它等于12!请注意,这只是一个问题,因为一个参数的函数()有副作用。
这是另一个流行的例子:
相关文章推荐
- 容器管理
- 多线程程序何时需要加锁
- 关于Environment.getExternalStorageDirectory()不能获取SD卡路径问题
- String、StringBuffer、StringBuilder的区别
- (二)企业部分之lnmp环境的搭建:mysql源码安装
- 创建镜像
- impala不能查询hive中新增加的表问题
- MySQL 基本操作之数据库操作
- 网站页面的颜色和线条搭配
- UITextField限制个数,没用代理
- 淘宝开源消息中间件-Metamorphosis
- Docker安装
- View的测量过程学习onMeasure
- CSS基础
- 千万级规模高性能、高并发的网络架构经验
- texturepacker
- git 基本操作
- 正则表达式
- js中如果long类型值过长,字段自动截取问题
- Docker Swarm项目