Сохраняются ли статические локальные переменные в классе между объектами? - PullRequest
3 голосов
/ 10 июня 2010
class MyClass
{
  static int staticInt;

  void instanceMethod( int param )
  {
    static int parameter = param;
  }
}

Очевидно, staticInt является общим для всех экземпляров MyClass.Но могут ли разные экземпляры MyClass иметь разные значения parameter статической локальной переменной в instaceMethod?

Update

А как насчет выполнения программы?Конечно, они могут быть разными в нескольких экземплярах программы?Что определяет «сферу» там - исполнительный блок?Среда выполнения C ++?

Обновление

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

Ответы [ 4 ]

7 голосов
/ 10 июня 2010

Существует ровно один экземпляр parameter.

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

6 голосов
/ 10 июня 2010

Чтобы иметь разные значения parameter для разных экземпляров, вы должны сделать parameter нестатическим членом класса.

В вашей текущей версии все экземпляры будут использовать один и тот же объект parameter. Все static объекты ведут себя одинаково в этом отношении. Единственное, что зависит от точки объявления, это область действия имени. то есть регионы, где имя видно. Что касается времени жизни и сохраняющих значение свойств переменной - они всегда одинаковы. В этом отношении она похожа на «глобальную» переменную, независимо от того, где вы ее объявляете.

В вашем примере нет разницы между parameter и staticInt, когда речь идет об их сохраняющих ценность свойствах. Единственное отличие состоит в том, что staticInt доступен для всех членов класса, а parameter доступен только для метода instanceMethod.

Язык не позволяет создавать переменные, значения которых сохраняются между выполнениями программы. Этот вид постоянства должен быть реализован вручную.

1 голос
/ 10 июня 2010

Да, они оба сохраняются.Они не могут иметь разные значения между экземплярами.

0 голосов
/ 10 июня 2010

значения не являются постоянными при выполнении программы (между двумя различными вызовами одной и той же программы)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...