Нет, ты не прав. И да, C ++ очень злоупотребляет словом «статический».
Статическая переменная-член класса, конечно, является глобальной, причем класс действует как область пространства имен и с некоторыми различиями в правах доступа, если он является частным или защищенным (доступ к нему может получить только класс).
Однако статическая функция-член класса похожа на обычную бесплатную функцию (не член класса) и имеет свои собственные локальные переменные каждый раз, когда она вызывается.
Единственное реальное различие между статической функцией-членом класса и обычной свободной функцией, помимо соглашения об именах, состоит в том, что она имеет доступ к закрытым членам класса (и нуждается во внешнем «экземпляре» одного из них).
Кроме того, статическая функция-член класса может быть вызвана из шаблона с переменным параметром шаблона, вызывая то, что обычно называется «полиморфизмом времени компиляции» и обычно используется в метапрограммировании.
Статическая «локальная» переменная в любой функции является однократной, с другой стороны, она также немного похожа на глобальную и чувствительна к проблемам конкуренции потоков, поскольку два потока, вызывающие функцию, обращаются к одному и тому же экземпляру.
person
CashCow
schedule
06.01.2011