Задать вопрос
e_asphyx
@e_asphyx

Стоит ли использовать private static функции в C++?

Или стоит обойтись static функциями в стиле C? Просто последнее мне кажется не очень в стиле C++, в смысле, управление областью видимости на уровне файлов, а не на уровне классов.
  • Вопрос задан
  • 2509 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 5
@DancingOnWater
Так и только так, т.к. только в этом случае вы получите доступ к private и protected секциям класса
Ответ написан
@Koss1024
На самом деле ответ неоднозначен. И важны критерии

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

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

Однако если доступ таки нужен (что скорее всего результат не лучшей декомпозиции) то конечно да

Это не вопрос стиля. В С++ тоже можно и нужно писать функции. Это не Java.
Ответ написан
Комментировать
@degs
Корректный ответ состоит из обьединения двух предыдущих.
Если у вас один из параметров - обьект этого класса и вам нужен доступ к приватным его членам, то это единственный выход. В остальных случаях из эстетических соображений будет лучше выглядеть свободная функция.
Ответ написан
Комментировать
Trrrrr
@Trrrrr
некоторые считают хорошим тоном, что если функция не работает с членами класса, то ее необходимо обьявлять статиком. Некоторые анализаторы кода могут пожаловаться на такую функцию. Если вы считаете, что эта функция не должна быть доступна извне то вполне можно держать ее в привате.
Еще некоторые вместо таких объявлений в cpp файле в unanimous namespace просто пишут, что бы не захламлять хедер.

При использовании ТДД статические функции вообще зло :D Так как вы ее просто такне подмените для написания теста.

Так что ответ - можно, но если в команде такое не практикуется то нет :)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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