Tôi thử kiểm tra lại mã từ Adam Pierce và thêm hai trường hợp nữa: biến tĩnh trong lớp và kiểu POD. Trình biên dịch của tôi là g ++ 4.8.1, trong Windows OS (MinGW-32). Kết quả là biến tĩnh trong lớp được xử lý giống với biến toàn cục. Hàm tạo của nó sẽ được gọi trước khi nhập hàm main.
(1) : Trạng thái đúng phải là: "trước khi bất kỳ hàm nào từ cùng một đơn vị dịch được gọi". Tuy nhiên, để đơn giản, như ví dụ dưới đây, thì nó là chức năng chính .
bao gồm <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;
}
kết quả:
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
Có ai đã thử nghiệm trong Linux env không?