请问什么是side effect(副作用)

student2007 2006-04-02 06:16:39
请问什么是函数side effect(副作用),什么是表达式的side effect能举个列子吗?谢谢了
...全文
487 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fiftymetre 2006-04-02
  • 打赏
  • 举报
回复
百度一下多的是了。。。。。
fiftymetre 2006-04-02
  • 打赏
  • 举报
回复
c90与C99关于side effect的定义是一样的:

Accessing a volatile object, modifying an object, modifying a file, or calling a function that does any of those operations are all side effects, which are changes in the state of the execution environment. Evaluation of an expression may produce side effects. At certain specified points in the execution sequence called sequence points, all side effects of previous evaluations shall be complete and no side effects of subsequent evaluations shall have taken place.


当执行序列运行到某些特定的被称为顺序点的地方,应该完成此前计算的所有副作用同时不能发生任何子序列计算产生的副作用。

表达式的副作用,举个简单的例子就是:int b,a=5;b=++a*--a;b的结果有可能为25,因为此表达是使a先自加再自减a等于5,最后结果是5*5等于25;有可能为30,因为a先自加等于6再自减等于5最后结果是6*5等于30。总之结果不一定。因为C标准里没有规定a到底取哪一个时刻的值。但有一点是可以肯定的,*在++,--之后运算。


函数的副作用:通过函数调用,使得实在参数的值得以改变,或产生特定的操作,称为 函数的副作用。作为语句的函数调用的功能是通过函数的副作用来体现的,因而把一个无副作用的函数作为语句来调用是毫无意义的.



考你一题

int m=1;
int n;
n=m++ + m++;
请回答结果是多少? 为什么这样?

实在不明白就发短消息问我,裘宗燕 曾在CSDN开发高手好像是04.8期上用过这个文章的。讲到的。:)




crescentg 2006-04-02
  • 打赏
  • 举报
回复
函数的副作用:通过函数调用,使得实在参数的值得以改变,或产生特定的操作,称为 函数的副作用。作为语句的函数调用的功能是通过函数的副作用来体现的,因而把一个 无副作用的函数作为语句来调用是毫无意义的.
这是我在书上看到的.
crescentg 2006-04-02
  • 打赏
  • 举报
回复
函数的副作用:通过函数调用,使得实在参数的值得以改变,或产生特定的操作,称为 函数的副作用。作为语句的函数调用的功能是通过函数的副作用来体现的,因而把一个 无副作用的函数作为语句来调用是毫无意义的.
这是我在书上看到的.

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧