2011-07-27 5 views
17

Есть ли какие-либо преимущества при использовании private (возможно, также static) функции в классе для служебных функций, используемых в моем классе, которые не нуждаются в доступе к данным экземпляра с использованием глобальных функций static в моем .cpp файл, реализующий класс?
Первые звуки чище для меня, но второй действительно имеет смысл, поскольку эти функции не нужно даже упоминать в файле .h.Частные или статические функции в C++

+1

Связанный: http://stackoverflow.com/questions/2739146/c-oop-which-functions-to-put-into-the-class –

ответ

11

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

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

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

5

Если данная функция относится к вашему class, тогда вы правы. Вы должны сделать их private static в вашем теле class.

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

+1

он может относиться к реализации класса , а не интерфейс класса, как в большинстве случаев. в этом случае не нужно загрязнять интерфейс класса –

1

Просто сделайте их файло-статическими функциями. Если они не имеют никакого отношения к классу, не кладите их туда.

+2

Я бы порекомендовал неназванную функцию пространства имен вместо файловой статической –

+1

Я знаю, что «современный C++» вместо этого рекомендует использовать функции в неназванных пространствах имен, но я не вижу никаких технических преимуществ. На самом деле это может быть невыгодно, поскольку такая функция имеет внешнюю связь и может замедлить связь. – zvrba

+0

http://stackoverflow.com/questions/154469/unnamed-anonymous-namespaces-vs-static-functions –

0

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

Смежные вопросы