Для чего предназначены статические переменные? Какая разница между static int и int?
Что такое статические переменные?
Ответ 1
Ключевое слово static
имеет четыре отдельных применения, только два из которых тесно связаны:
- static в глобальной области и пространстве имен (применяется к обеим переменным и функциям) означает внутреннюю привязку
- это заменяется на неназванные пространства имен и не имеет отношения к остальным
- в частности, другие склонны подразумевать какую-то уникальность, но внутренняя связь означает противоположность: у вас может быть много объектов с тем же именем, если у каждого есть внутренняя связь, и у вас есть только одна единица перевода
- статические члены данных "разделяются" между всеми экземплярами класса
- это больше похоже на то, что они не зависят от экземпляра класса
- это иногда группируется со статическими методами
- статические методы не "работают" с текущим экземпляром
- нет этого указателя; может вызывать без экземпляра
- статические локальные переменные (в функциях) сохраняются в рамках каждого вызова функции
Оба статических элемента данных и статические локальные переменные могут стать скрытыми глобальными состояниями и должны использоваться осторожно.
Теперь, какие из двух тесно связаны? Это не два члена класса: предупреждение о глобальном состоянии дает его. Вы можете рассматривать статические члены данных как статические локальные переменные, в которых функции, к которым они принадлежат, являются всеми методами класса, а не одной функцией.
Я нашел много связанных вопросов, но, что удивительно, нет дубликатов.
Ответ 2
Статические переменные инициализируются в сегменте данных (на x86, изменяются, если это необходимо для других архитектур), а не в стеке. Они сохраняют жизнь программы вместо того, чтобы испаряться, когда они выходят из сферы действия.
Ответ 3
Статический член может ссылаться без экземпляра.
Смотрите раздел "Статические члены" здесь: http://www.cplusplus.com/doc/tutorial/classes2/