Статические функции против константных функций - PullRequest
17 голосов
/ 30 марта 2010

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

int funct(int x) const; 

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

static int funct(int x); 

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

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

Ответы [ 2 ]

22 голосов
/ 30 марта 2010

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

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

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

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

7 голосов
/ 30 марта 2010

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

...