J'essaye de tester à nouveau le code d' Adam Pierce et j'ai ajouté deux autres cas: variable statique dans la classe et type POD. Mon compilateur est g ++ 4.8.1, sous Windows OS (MinGW-32). Le résultat est une variable statique dans la classe est traitée de la même manière avec la variable globale. Son constructeur sera appelé avant d'entrer la fonction principale.
(1) : L'état correct doit être: "avant qu'une fonction de la même unité de traduction ne soit appelée". Cependant, pour simple, comme dans l'exemple ci-dessous, alors c'est la fonction principale .
inclure <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; // static member
};
test test::t("static in class");
test t("global variable");
void f()
{
static test t("static variable");
static int num = 10 ; // POD type, init before enter main function
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;
}
résultat:
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
Quelqu'un testé dans l'environnement Linux?