C++函数中的static变量初始化及析构顺序
来源:互联网 发布:印第安老斑鸠 知乎 编辑:程序博客网 时间:2024/06/09 20:48
有如下的类:
class base{public:base(char* pStr){m_pStr = pStr;cout << pStr << " Constructor!" << endl;}~base(){cout << m_pStr << " Destructor!" << endl;}void fund(char* pStr){if (pStr != NULL){static base b(pStr);}}void fund2(){static base e("e");}private:char* m_pStr;};base glb("global");
1. 有如下调用方式
int main(){base loc("local");return 0;}
请问输出的信息是什么?
答案:
global Constructor!
local Constructor!
local Destructor!
global Destructor!
需要注意的是函数中的static变量由于函数没有被调用而没有被初始化~
那么接下来,我们使用如下代码:
int main(){base d("d");int i;cin >> i;if (i == 0){d.fund(NULL);d.fund("R1");d.fund2();}else{d.fund2();d.fund("R2");}return 0;}
当用户输入0时
global Constructor!
local Constructor!
R1 Constructor!
e Constructor!
local Destructor!
e Destructor!
R1 Destructor!
global Destructor!
当用户输入非0时
global Constructor!
local Constructor!
e Constructor!
R2 Constructor!
local Destructor!
R2 Destructor!
e Destructor!
global Destructor!
由此可见,static的变量可以延迟到用户第一次进入到初始化代码时才执行,而且执行过程可根据用户输入而改变,甚至可以按照正确的“先创建后销毁”进行!
- C++函数中的static变量初始化及析构顺序
- static 变量和static 构造函数 以及对象初始化顺序
- C语言中的 static变量、static函数
- C语言中的 static变量、static函数
- C语言中的 static变量、static函数
- C语言中的 static变量、static函数
- static 及java初始化顺序
- C++ 模板类中的static变量和函数 初始化
- C/C++中的static变量和static函数
- c语言中的static变量和static函数
- C语言中的static前缀(static函数/变量)
- C语言中的static变量和static函数
- C/C++中的 static 变量和 static 函数
- C语言中的static变量和static函数
- c语言中的static变量和static函数
- java中static变量与非static变量初始化顺序
- Java中static变量的初始化顺序
- c中的static变量
- 一起学Windows Phone7开发(十二.二 ShellTileSchedule)
- 【整理】解决php输出时出现多余的空格或者换行
- 一起学Windows Phone7(十三.控件)
- dom解析
- C语言中基本的输入和输出函数的用法第二讲(C语言学习随笔四)
- C++函数中的static变量初始化及析构顺序
- 【整理】取消eclipse for php 括号自动补全闭合,修改自动匹配,开启自动换行
- ddraw transparency (overlay 实现) 2
- 【转】全国各运营商DNS汇总
- Mysql中 主键、外键 的 Cascade ,NO ACTION ,Restrict ,SET NULL
- 一起学Windows Phone7开发(十三.一 容器控件)
- VC6.0中OpenCV的配置问题
- XML使用
- 【转】js nodetype介绍