Статические функции vs const

Я смотрю на функцию-член

int funct(int x) const; 

И мне интересно, если

static int funct(int x); 

было бы лучше.

Если функция-член не использует какую-либо из переменных-членов, она должна быть статической. Есть ли какие-то вещи, которые могут отвратить это?

Ответы

Ответ 1

Предполагая, что это С++, функция, объявленная как const, указывает, что она не намеревается изменять элементы данных в экземпляре, на который он вызван, то есть на этом указателе. Поскольку есть способы уклониться от этого, это не гарантия, а просто объявление.

Статическая функция не работает на конкретном экземпляре и, следовательно, не принимает указатель "this". Таким образом, это "const" очень наивно.

Если ваш метод не обязательно связан с конкретным экземпляром, имеет смысл сделать его статическим.

Однако, если ваш метод является полиморфным, то есть вы предоставляете другую реализацию на основе экземпляра объекта, на который он вызывается, тогда он не может быть статическим, потому что он зависит от конкретного экземпляра.

Ответ 2

Если функция-член не использует какую-либо из переменных-членов, то часто стоит задать вопрос: "Обязательно ли это быть функцией-членом в первую очередь?"