gpt4 book ai didi

c++ - 为什么 GCC 不强制 __attribute__((pure)) 函数中的参数为常量?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:20:57 26 4
gpt4 key购买 nike

以下代码在 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”。)

据我了解,pure 属性告诉编译器该函数没有外部影响(请参阅“pure”部分 here )。但是 UnpureFunction 正在修改它的参数。为什么允许这种情况发生?至少,编译器可以自动将每个参数设为常量。

最佳答案

据我所知,pure对编译器的 promise ,但它不会尝试验证您没有说谎。即使它确实强制参数为 const,这些参数也可能是谎言(例如,一个对象可能有一个可变成员,当您的代码调用成员函数时该成员会被修改)。

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

关于c++ - 为什么 GCC 不强制 __attribute__((pure)) 函数中的参数为常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4812445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com