请问一下,如果一个函数有一个指针参数,它是否可以被标记为pure
或const
,为什么?
根据GCC文档:
纯函数的一些常见例子是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 是纯函数,编译器如何知道不使用第一次调用的结果?我想将一个数组传递给一个纯函数,并仅基于该数组计算结果。有人可以向我保证这是可以的,并且当数组中的值发生变化但地址不变时,我的函数会被正确调用。