2011-01-30 1 views
4

Почему у нас нет разных копий статических переменных для разных объектов?Почему статические члены класса одинаковы для всех объектов?

+6

О, серьезно, давай. 2 downvotes? Просто потому, что они не понимают ключевую концепцию того, что означает «статический» (пока)? Вероятно, больше людей совершают эту ошибку, особенно в ранние дни программирования. И почему это делает этот вопрос менее ясным или полезным, чем, скажем, «Почему случайный не такой случайный?» (Который в равной степени может быть классифицирован в «здравом смысле»)? Я помню, что некоторое время назад в FAQ говорилось, что здесь даже приветствуются даже начинающие вопросы. – Joey

+1

@Joey: Я согласен, ни один вопрос не должен гарантировать ниспровержение только потому, что он показывает невежество. Мы все должны начать где-то, и этот вопрос, хотя и краткий, хорошо написан и идет прямо к делу. –

ответ

5

Потому что они были бы instance members, то.

Основная характеристика static members заключается в том, что они разделяются всеми экземплярами класса.

4

Статический член не связан с конкретным экземпляром.

Если вам нужны разные значения члена для каждого экземпляра, вы должны использовать экземпляр участников (удалите статическое ключевое слово).

3

Это статический объект, который является общим для всех экземпляров класса. У обычных членов нет этого свойства.

3

Это определение static - существует одна копия данных. Он отдельно хранится, скорее всего, вместе со всеми другими статическими данными библиотеки или приложения.

-1

Поскольку статические элементы класса хранятся отдельно в разделе BSS, каждый экземпляр класса имеет то же значение.

+1

* Возможно. * Но еще раз, это деталь реализации, а не ключ к подлинному пониманию происходящего (или того, что гарантируется спецификацией). –

1

Потому что это то, что в этом контексте означает static.

5

Поскольку секция $ 9.4.2/1 от стандарта C++ (2003) говорит,

Статический член данных не является частью подобъектов класса. Существует только одна копия статического элемента данных , общая для всех объектов класса .

Поскольку стандарт сам по себе определяет, что такое C++, что нет, так это то, как был разработан C++!

Статические элементы больше похожи на глобальные объекты. Такая же копия относится ко всем объектам!

Подробнее см. Это сообщение: Do static members of a class occupy memory if no object of that class is created?

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