Я намагаюся ще раз протестувати код від Адама Пірса і додав ще два випадки: статичну змінну в класі та тип POD. Мій компілятор - g ++ 4.8.1, в ОС Windows (MinGW-32). Результат - статична змінна в класі, обробляється так само, як і глобальна змінна. Його конструктор буде викликаний перед введенням основної функції.
(1) : Правильний стан повинен бути: "перед викликом будь-якої функції з тієї самої одиниці перекладу". Однак для простої, як у прикладі нижче, це головна функція.
включити <iostream>
#include < string>
using namespace std;
class test
{
public:
test(const char *name)
: _name(name)
{
cout << _name << " created" << endl;
}
~test()
{
cout << _name << " destroyed" << endl;
}
string _name;
static test t;
};
test test::t("static in class");
test t("global variable");
void f()
{
static test t("static variable");
static int num = 10 ;
test t2("Local variable");
cout << "Function executed" << endl;
}
int main()
{
test t("local to main");
cout << "Program start" << endl;
f();
cout << "Program end" << endl;
return 0;
}
результат:
static in class created
global variable created
local to main created
Program start
static variable created
Local variable created
Function executed
Local variable destroyed
Program end
local to main destroyed
static variable destroyed
global variable destroyed
static in class destroyed
Хтось тестував у Linux env?