Вопрос

Допустим, у меня есть эта программа:

родовое слово

(Конечно, этот пример не имеет смысла, поскольку я бы явно объявил counter как частный атрибут, но это просто для иллюстрации проблемы).

Я хотел бы знать, как C ++ ведет себя в подобной ситуации: будет ли переменная counter в методе bar () одинакова для всех экземпляров?

Это было полезно?

Решение

Да, counter будет использоваться всеми экземплярами объектов типа Foo в вашем исполняемом файле.Пока вы находитесь в однопоточной среде, он будет работать как общий счетчик.

В многопоточной среде у вас будут интересные условия гонки для отладки :).

Другие советы

Под выражением «быть одинаковым для каждого экземпляра» вы подразумеваете, что будет один экземпляр этой переменной, общий для каждого экземпляра класса, тогда да, это правильно.Все экземпляры класса будут использовать один и тот же экземпляр переменной.

Но имейте в виду, что с переменными класса вы должны во многих случаях учитывать такие вещи, как многопоточность, что является совершенно другой темой.

Из Язык программирования C ++ (2-е издание) , стр. 200, Бьярн Страуструп:

<цитата>

Не используйте static , кроме как внутри [простых] функций (§7.1.2) и классов (§10.2.4).

Ваш пример находился в паре строк от того, что вы могли бы скомпилировать и протестировать:

родовое слово

Результат выглядит так:

родовое слово

Итак, да, счетчик используется во всех экземплярах.

Вам просто нужно усвоить две вещи:

  1. Статические переменные хранятся в статической области исполняемой программы (которая совпадает с областью глобальной переменной).
  2. Область действия ограничена общими правилами использования круглых скобок. Кроме того, статические переменные имеют внутреннюю связь.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top