【发布时间】:2015-07-09 01:51:53
【问题描述】:
有人可以澄清一下函数是否(以及为什么)可以归因于pure 或const(如果它具有指针参数)。
纯函数的一些常见示例是 strlen 或 memcmp。
纯函数的全部意义在于它只需要为相同的参数调用一次,即如果编译器认为它适合这样做,结果可以被缓存,但是这对 memcmp 是如何工作的?
例如:
char *x = calloc(1, 8);
char *y = calloc(1, 8);
if (memcmp(x, y, 8) > 0)
printf("x > y\n");
x[1] = 'a';
if (memcmp(x, y, 8) > 0)
printf("x > y\n");
第二次调用memcmp的参数和第一次相同(指针指向同一个地址),如果memcmp是纯的,编译器怎么知道不使用第一次调用的结果?
在我的例子中,我想将一个数组传递给一个纯函数,并仅根据数组计算结果。有人向我保证,这没关系,当数组中的值发生变化但地址没有变化时,我的函数将被正确调用。
【问题讨论】: