Задать вопрос
@JustMoose
Программист. Радиолюбитель. Прокрастинатор ;)

Что лучше: static методы или функции?

Всем привет!
Есть вот такой кусочек кода
Судя по базовому классу AllStatic и по тому, что все методы помечены как static, именно это авторы и имели в виду.
Вопрос: а почему именно так?
Меня как-то коллеги на прошлой работе пытались убедить, что вместо класса со статиками лучше использовать обычные функции. (Хотя у меня есть смутные воспоминания, что я где-то видел рекомендацию именно про использование статика... У Гради Буча что ли?)
В общем, если у вас есть разумное объяснение, почему static лучше, чем функции, напишите пжл!

ЗЫ: В гугл ходил, рассуждения видел... Но хочется отсылки к какому-нибудь конкретному учебнику, который про это рассказывает.
  • Вопрос задан
  • 102 просмотра
Подписаться 1 Простой 10 комментариев
Пригласить эксперта
Ответы на вопрос 2
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Посмотрите в этот allStatic: https://github.com/openjdk/jdk/blob/496641955041c5...

Там написано, почему используются статические методы: Почему-то авторы какого-то проекта HotSpot решили, что плодить namespac'ы плохо. Так что это вызвано соглашениями по стилю в конкретном проекте. Их право.

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

Еще логично сделать функцию членом класса, если она именно с классом работает. Например, функции фабрики.

Кроме этого я не вижу особо причин использовать статические методы вместо функций.
Ответ написан
maaGames
@maaGames
Погроммирую программы
Есть одно радикальное отличие от namespace: в такой allStatic невозможно добавить функции вне этого самого класса. В то же время один и тот namespace можно делать в куче разных файлов.
Принципиальная разница только при использовании такого класса в шаблонах. Когда есть несколько allStatic классов с одинаковыми функциями и в шаблон передаётся та или иная реализация. С namespace такое не сделаешь. То есть можно придумать ситуации, когда allStatic реально выгоднее и полезнее пространства имён.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы