Статические существует, чтобы связать метод с классом, а не как:
- Ассоциирования его с например этим классом (как написание нормальной, не-статической функции-члена).
- Сохранение его в глобальном пространстве имен или в любом пространстве имен, в котором вы были бы в противном случае (например, объявление функции только в файле, а не в классе).
Статик говорит, что «концептуально это что-то связано с/с этим классом, но оно не зависит от какого-либо экземпляра этого класса».
В более официальных терминах: статическая функция-член такая же, как функция, объявленная вне класса всеми способами, отличными от того, что она является частью пространства имен этого класса, и тем, что она имеет права доступа к частному/защищенному классу этого класса данных.
Возвращаясь к вашему вопросу:
- Там нет никакой выгоды оптимизации здесь.
- Полезная функция не имеет к этому никакого отношения. Это имеет смысл охватить функцию в самом классе (а не в качестве экземпляра).
- Он не передает этот указатель, потому что нет экземпляра, о котором можно было бы говорить.Вы можете вызвать статическую функцию-член без вызова конструктора этого класса.
Спасибо, но есть частные статические функции, которые должны быть доступны только членам класса. Разве они не подпадают под категорию утилиты, потому что в любом случае они не будут доступны внешними функциями. –
Я вижу, ваш вопрос относится к тому, что я бы назвал «вспомогательными функциями». Я бы сказал, что разница все та же: если вам нужен экземпляр класса в этой функции, скорее всего, он не должен быть статической функцией, если вам не нужен экземпляр класса, идите статически. – Mark