为什么__attribute __((pure))函数中的GCC强制参数不是const?

emc*_*sen 4 c++ attributes

以下代码在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);
}
Run Code Online (Sandbox Code Playgroud)

(打印"42.00 43.00".)

据我了解,pure属性告诉编译器该函数没有外部效果(请参阅此处的 "纯"部分).但是UnpureFunction正在修改它的参数.为什么允许这种情况发生?至少,编译器可以自动使每个参数为const.

mol*_*ilo 10

据我所知,pure对编译器承诺,但它不会试图验证你不是在撒谎.即使它确实强制参数const,这些参数也可能存在(例如,对象可能具有在代码调用成员函数时被修改的可变成员).

如果您正在寻找const正确性,请使用const参数.在pureconst属性在那里提供可用于优化提示.