参考https://www.cnblogs.com/skullboyer/p/10979704.html
https://www.cnblogs.com/laojie4321/p/4405069.html
class T{
public:
static int cls_field;
int field1 = 3; // 类内初始值,编译时初始化,data
T(){
// field1 = 5;
}
};
int T::cls_field = 4; // 类内静态变量,全局初始化,data
static int GFlag; // .o文件内限定全局变量,bss
int GFlag2; // 全局变量,bss
int main(int argc, char* argv[])
{
static int Flag; // 局部静态变量初始化零,bss
std::cout<<"static int Flag:"<<Flag<<std::endl;
std::cout<<"static int GFlag:"<<GFlag<<std::endl; // .o文件内限定全局变量初始化零,bss
std::cout<<"global int GFlag2:"<<GFlag2<<std::endl; // 全局变量初始化零,bss
// 常量在编译汇编时已经初始化
std::cout<<"static int T::cls_field:"<<T::cls_field<<std::endl; // 类静态属性编译时初始化,data
T obj2 = T();
std::cout<<"initial value within class(类内初始值),T obj2.field1: "\
<<obj2.field1<<std::endl; // 类内初始值编译时初始化,data,将被构造函数覆盖(如果确实构造了的话)
}
输出:
static int Flag:0
static int GFlag:0
global int GFlag2:0
static int T::cls_field:4
initial value within class(类内初始值),T obj2.field1: 3