下面的代码没有警告编译GCC 4.2下,据我所知,这实在不应该:为什么__attribute __((纯))函数中的GCC强制参数为const?
#include <fstream>
__attribute__((pure))
double UnpureFunction(double* x) {
x[0] = 42;
return 43;
}
int main() {
double x[] = {0};
double y = UnpureFunction(x);
printf("%.2f %.2f\n", x[0], y);
}
(它打印出“42.00 43.00”。)
据我了解纯属性告诉编译器该函数没有外部影响(参见“纯”here部分)。但UnpureFunction正在修改其参数。为什么会发生这种情况?编译器至少可以自动使每个参数都为常量。