【发布时间】:2011-01-27 03:28:22
【问题描述】:
以下代码在 GCC 4.2 下编译时没有警告,据我所知,它确实不应该:
#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 正在修改它的参数。为什么允许这种情况发生?至少,编译器可以自动将每个参数设为 const。
【问题讨论】:
标签: c++ attributes