Документация gcc для __attribute__((pure))
гласит:
Многие функции не имеют эффектов, кроме возвращаемого значения, а их возвращаемое значение зависит только от параметров и/или глобальных переменных. Такая функция может быть подвержена общему исключению подвыражения и оптимизации цикла, как и в случае с арифметическим оператором. Эти функции должны быть объявлены с атрибутом
pure
.
Что значит только зависеть от параметров? Рассмотрим:
struct Wrapper {
int i;
int get() const { return i; }
void set(int x) { i = x; }
};
Является ли оно допустимым для метки Wrapper::get()
как функции-члена pure
? Это зависит только от неявного экземпляра Wrapper
, но эти данные могут измениться.