Здесь есть такой же вопрос: When exactly is constructor of static local object called?C++ - вызов конструктора глобального статического объекта и локального статического объекта отличается?
, но он упоминает только о локальном статическом объекте, поэтому я хочу добавить еще один случай для глобального статического объекта.
Скажем, у нас есть два примера такой код:
экзамен 1. локальная статическая ==========
class Mix {
Mix() { //the ctor code }
};
Mix& globalFunction()
{
static Mix gMix; // when its ctor execute ?
return gMix;
}
экзамен 2. глобальный статический === =======
class Mix {
Mix() { //the ctor code }
static MyClass MReen; // when its ctor execute ?
};
//initialization static var
MyClass Mix::MReen = 0 ;
- Когда именно 'код конструктора' Выполнено 2 статических объекта выше?
- Как это работает на разных языках: g ++ (работает в Linux) и компиляторе VC++?
Благодаря
'Микс :: MReen = 0' - это назначение, а не инициализация, и это запрещено в глобальном масштабе. добавьте 'MyClass' к нему, чтобы сделать его инициализацией, хотя инициализация до 0 является избыточной. – uk4321
Ответ здесь: http://stackoverflow.com/questions/246564/what-is-the-lifetime-of-a-static-variable-in-a-c-function –
Спасибо, мне не хватало MyClass. Обновлено. –