C表达式的基本作用是求值。
C/C++ 语言是“基于表达式的语言”,所有计算(包括赋值)都在表达式里完成。
例如,变量a的类型为int,表达式a=5的作用有两个,一个是主作用:求表达式的值,该表达式的值为5;另一个作用是副作用:将表达式a=5的值赋值给变量a。
再如:在计算表达式a++时,它有两个作用,一个是主作用:求a的值,另一个是副作用:a的值加1。
printf(“hello\n”)副作用就是将"hello\n"打印出来
在C99及以上标准中,副作用的定义是:易变访问对象、修改对象、修改文件,或者调用包含这些操作的函数都是副作用,它们都会改变执行环境的状态。(这里要有点儿状态机的感觉)
Accessing a volatile object. modifying an object, modifying a file, or calling a function that
does an of those operations arc all side effects, which are changes in the state of the execution
enveronment. Evaluation of an expression may produce side effects.
引用透明:如果一个表达式(或子表达式)只计算出值而不改变环境,我们就说它是引用透明的,这种表达式早算晚算对其他计算没有影响(不改变计算的环境。当然, 它的值可能受到其他计算的影响)。比如:(a+b)*(c+d),无论先计算乘号两边都可以