Являются ли статические переменные класса такими же, как внешние переменные, только с областью действия класса? - PullRequest
6 голосов
/ 27 октября 2011

Мне кажется, что статическая переменная класса идентична переменной extern, потому что вы только объявляете ее в операторе static int x / extern int x и фактически определяете ее в другом месте (обычно файл .cpp)

статическая переменная класса

// .h file
class Foo
{
    static int x ;
} ;

// .cpp file
int MyClass::x = 0 ;

Внешние переменные:

// .h file
extern int y;

// .cpp file
int y = 1;

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

Ответы [ 3 ]

4 голосов
/ 27 октября 2011

Да, оба имеют статическую продолжительность хранения и внешнюю связь;они имеют практически одинаковые свойства времени выполнения, но различаются только (во время компиляции).

2 голосов
/ 27 октября 2011

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

1 голос
/ 27 октября 2011

Да.

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

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

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

Это также вопрос того, какВы разрабатываете свое приложение, даже если обе функции доступны.

...