今天,我在阅读有关纯函数的信息,并对其使用感到困惑:

如果该函数为同一组输入返回相同的一组值并且没有任何可观察到的副作用,则称其为纯函数。

例如strlen()是纯函数,而rand()是不纯函数。

__attribute__ ((pure)) int fun(int i)
{
    return i*i;
}

int main()
{
    int i=10;
    printf("%d",fun(i));//outputs 100
    return 0;
}

http://ideone.com/33XJU

上面的程序的行为与没有pure声明时的行为相同。

将函数声明为pure有什么好处[如果输出没有变化]?

最佳答案

pure让编译器知道它可以对该函数进行某些优化:想象一下类似

for (int i = 0; i < 1000; i++)
{
    printf("%d", fun(10));
}

使用纯函数,编译器可以知道它只需要评估一次fun(10),而不是1000次。对于复杂的功能,这是一个巨大的胜利。

关于c - 纯功能的好处,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11153796/

10-11 21:58
查看更多