引用透明的函数肯定没有副作用。然而,没有副作用的函数并不总是引用透明的。
例子:
int x = 0;
int referentiallyTransparent(int y)
{
return y + 1;
}
int hasNoSideEffects(int y)
{
return x + y;
}
Run Code Online (Sandbox Code Playgroud)
该功能hasNoSideEffects没有副作用。这意味着调用hasNoSideEffects(y)不会影响程序的状态。然而,它返回的值受程序状态的影响,并且不仅仅取决于输入变量y,因此调用hasNoSideEffects(y)不能总是被它减少到的值替换。