Какова область видимости переменных, объявленных в конструкторе класса? - PullRequest
3 голосов
/ 27 марта 2009

Мне было любопытно, какова область применения переменных, объявленных внутри конструктора класса, которые не являются членами данных этого класса?

Например, если конструктор нуждается в итерации int i, будет ли эта переменная уничтожена после завершения конструктора, или она будет глобальной для программы?

Ответы [ 6 ]

11 голосов
/ 27 марта 2009

В этом смысле конструктор подобен любой другой функции - любая объявленная внутри переменная имеет обычные ограничения области видимости, и все они обязательно выходят из области видимости и уничтожаются после завершения конструктора.

6 голосов
/ 27 марта 2009

Как и любая другая функция, если это локальная переменная, она будет «уничтожена» в конце функции. Локальный охват.

5 голосов
/ 13 января 2010

Как это часто бывает, вы можете смешивать понятия объема и времени жизни, поэтому я рассмотрю оба.

Область действия имени, объявленного внутри конструктора, совпадает с областью действия любого локального имени (тот факт, что это конструктор не имеет значения): область действия имени простирается до конца блока, в котором объявлено имя (и оно может иметь «дыры», когда имя скрыто объявлением еще более «локального» entify с тем же именем ).

Время жизни объекта am, определенного внутри конструктора, регулируется теми же правилами, что и время жизни любого локально определенного объекта (тот факт, что это конструктор не имеет никакого значения): объект с Длительность автоматического хранения уничтожается в конце его области действия, в то время как объект со статическим сроком хранения живет вечно.

3 голосов
/ 27 марта 2009

Переменные, объявленные в конструкторе класса, доступны внутри области видимости конструктора класса и нигде выше.

public MyClass() {
   int i = 0; // i is only available inside this constructor.
              // It can't be used in any other function of this class or any other.
}
2 голосов
/ 27 марта 2009

Локальные переменные, независимо от функции, уничтожаются при выходе из области видимости. Они не становятся «глобальными».

1 голос
/ 27 марта 2009

Область может быть статической (лексической) или динамической. В большинстве языков используется лексическая область действия, что означает, что область действия определяется текстом программы (например, «внутри набора фигурных скобок, где она определена»), а не значением того, что вы написали.

http://en.wikipedia.org/wiki/Scope_(programming)

...