Provo a testare di nuovo il codice di Adam Pierce e ho aggiunto altri due casi: variabile statica in classe e tipo POD. Il mio compilatore è g ++ 4.8.1, nel sistema operativo Windows (MinGW-32). Il risultato è una variabile statica nella classe che viene trattata allo stesso modo della variabile globale. Il suo costruttore verrà chiamato prima di entrare nella funzione principale.
(1) : Lo stato corretto dovrebbe essere: "prima che venga chiamata qualsiasi funzione della stessa unità di traduzione". Tuttavia, per semplice, come nell'esempio seguente, è la funzione principale .
includi <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;
}
risultato:
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
Qualcuno ha testato in ambiente Linux?