gcc c+中uu属性((const))的值/用途+; < >在声明编译器可以看到的函数或静态成员不能访问全局内存时,在C++程序中使用属性>(/const)< /代码>有什么价值?

gcc c+中uu属性((const))的值/用途+; < >在声明编译器可以看到的函数或静态成员不能访问全局内存时,在C++程序中使用属性>(/const)< /代码>有什么价值?,gcc,optimization,attributes,g++,Gcc,Optimization,Attributes,G++,比如说, int Add( int x , int y ) __attribute((const)) { return x+y; } 编译器知道此函数在其内存访问范围内受到限制。属性是否添加了任何内容?如果是,什么 谢谢 gnuc中的Josh表示函数作者不依赖于输入参数以外的任何值 这允许编译器将对此类函数具有相同参数的多个调用优化为单个调用,而无需分析函数体。如果函数体位于另一个翻译单元中,这一点尤其有用 在intadd(intx,inty)\uuuu属性((const))的情况下,

比如说,

int Add( int x , int y ) __attribute((const))
{
    return x+y;
}
编译器知道此函数在其内存访问范围内受到限制。属性是否添加了任何内容?如果是,什么

谢谢

gnuc中的Josh表示函数作者不依赖于输入参数以外的任何值

这允许编译器将对此类函数具有相同参数的多个调用优化为单个调用,而无需分析函数体。如果函数体位于另一个翻译单元中,这一点尤其有用

intadd(intx,inty)\uuuu属性((const))
的情况下,可以将多个调用(比如
Add(2,3)
)合并到一个调用中,并且可以缓存返回值,而不知道
Add
实际上做了什么

它还允许编译器验证函数是否符合声明的意图


有关更多详细信息和示例,请参阅。

编译器如何需要此功能?如果您有一个函数,它按值接收项,并且不引用任何外部变量,那么编译器不应该解决这个问题吗?