编译-Wsuggest-attribute=pure
使 GCC 建议潜在的函数,这些函数可以标记__attribute__ ((pure))
为优化目的。
这是GCC 文档上的定义:pure
许多函数除了返回值外没有任何影响,它们的返回值仅取决于参数和/或全局变量。这样的函数可以像算术运算符一样进行公共子表达式消除和循环优化。这些函数应该用纯属性声明。
我正在创建一个小型游戏引擎,其中有一个input_context
包含input_state
成员的类。该类通过从操作系统获取全局输入状态来input_context
更新每个帧的成员。input_state
它还包含几个“getter”来查询输入状态。
简化示例:
class input_context
{
private:
input_state _input_state;
public:
void update()
{
os::fill_input_state(_input_state);
}
auto mouse_x() const noexcept
{
return _input_state._mouse_x;
}
auto mouse_y() const noexcept
{
return _input_state._mouse_y;
}
auto is_key_down(keycode k) const noexcept
{
// `_keys` is an array of `bool` values.
return _input_state._keys[k];
}
};
GCC 告诉我所有这些“getter 方法”,比如和mouse_x()
,都是.mouse_y()
is_key_down()
__attribute__ ((pure))
我应该将这些方法标记为pure
吗?
我不这么认为,但 GCC 的建议让我对此感到好奇。
我不确定如何解释 GCC 的定义pure
——它说只依赖参数和/或全局变量的函数应该被标记为这样。
在某种程度上,全局 OS 输入状态可以解释为全局变量。
另一方面,“getter 方法”总是返回不同的值,具体取决于
_input_state
成员变量。