Static - странный зверь в C ++, который имеет разные значения в зависимости от контекста.
В File1.cpp «static int s» в определении класса указывает, что s является статическим членом, то есть, является общим для всех экземпляров теста.
«Статический тест t», однако, имеет другое значение: статическая глобальная переменная существует только в модуле компиляции и не будет видна другим модулям.Это поможет избежать путаницы с компоновщиком, если вы использовали одно и то же имя для двух разных вещей.В современном C ++ для этого можно использовать анонимные пространства имен:
namespace
{
test t;
}
Это означает, что t внутри File1.cpp и t внутри File2.cpp являются отдельными объектами.
В File2.cpp,Вы также определили статический метод get: статический метод - это метод, который принадлежит классу, а не экземпляру, и который может обращаться только к статическим членам класса.
Последнее использование статического, которое вы сделалине использовать в вашем примере, это локальная статическая переменная.Локальная статическая переменная инициализируется при первом запуске и сохраняет свое значение на протяжении всего выполнения, немного как глобальная переменная с локальной областью действия:
int add()
{
static value = 0;
value++;
return value;
}
Повторный вызов add () будет возвращать 1,затем 2, затем 3 ... Эта локальная статическая конструкция может быть полезна, например, для локальных кэшей.