在维基百科文章中https://en.wikipedia.org/wiki/Pure_function#Impure_functions它说下面的函数不是纯函数。
int f(int* x)
{
return *x;
}
这是为什么呢?该函数会为相同的参数返回相同的值吗?如果它是一个非可变引用,是否会被认为是纯引用,如下所示?
int f2(const int* x)
{
return *x;
}
最佳答案
f
不是纯的,因为对于相同的参数,它的返回值不一定相同。您可以使用相同的输入两次调用 f
并获得不同的输出。下面的程序演示了这一点:
#include <stdio.h>
int main() {
int i = 3;
int * const x = &i;
printf("%d\n", f(x));
i = 4;
printf("%d\n", f(x));
return 0;
}
因为 x
在两次调用之间没有变化,第二次调用 f(x)
可以被优化掉(有利于重用第一次的结果call) 如果 f
是纯的。显然,这可能会产生错误的结果,因此 f
不是纯的。
f2
出于同样的原因不是纯的。
关于c - 为什么这个函数不纯粹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56916347/