以下代码在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参数.在pure和const属性在那里提供可用于优化提示.
| 归档时间: |
|
| 查看次数: |
1205 次 |
| 最近记录: |