C++编程思想读书笔记--之static
来源:互联网 发布:淘宝联盟注册淘宝客 编辑:程序博客网 时间:2024/05/16 10:49
Static关键字
- 静态存储,在固定的地址上分配,
也就是说对象是在一个特殊的静态数据区上创建的,
而不是每次在函数调用时的堆栈上产生的。函数体内部的静态对象
如果对象是一个类,程序控制第一次转到对象的定义时,而且只有第一次时,才需要执行构造函数。静态对象的析构函数
静态对象的析构函数在程序从main()块中退出时,或者标准的C库函数exit()被调用时才被调用。
如果一个包含静态对象的函数从未被调用过,
那么这个对象的构造函数也不会执行,析构函数也不会执行。C++中,全局静态对象的构造函数是在main()之前调用的,
所以我们现在有了一个在进入main()之前执行一段代码的简单的、可移植的方法,
并且可以在退出main()之后用析构函数执行代码。
要在C中做到这一点,我们不得不熟悉编译器开发商的汇编语言的开始代码。
- 对一个特定的编译单位来说是本地的。
这里static控制名字的可见性,
所以这个名字在这个单元或类之外是不可见的。一般情况下,在文件范围内的所有名字(既不嵌套在类或者函数中的名字)对程序中的所有编译单元来说都是可见的,这就时所谓的外部连接。
在文件范围内,一个被明确声明为static的对象或函数的名字对编译单元(一般是指出现声明的.cpp文件)来说时局部变量,这就是所谓的内部连接。
内部连接的好处就是这个名字放在一个头文件中,不用担心连接时发生冲突。
那些通常放在头文件里的名字,象常量、内联函数,缺省情况下(C++是内部连接,C是外部连接)
- 冲突问题:
static两个含义怎样交叉。所有的全局对象都是隐含为静态存储类。
int a=0;
main(){/*...*/}
则a被存储在程序的静态数据区,在进入main()函数前,a即被初始化。
另外,a对全局都是可见的,包括所有的编译单元。用可见性术语,static(只在编译单元内可见)的反义是extern,他表示这个名字对所有的编译单元是可见的。
int a = 0;
extern int a =0;
上面这两个效果是一样的。
static int a= 0;
这么定义仅仅改变了a的可见性,现在a成了一个内部连接。但存储类型没有改变。
- C++编程思想读书笔记--之static
- C++编程思想读书笔记--之const
- C++编程思想读书笔记--之内联函数(inline)
- C++编程思想读书笔记--C++中的C
- 《Java编程思想》读书笔记之二
- 《JAVA编程思想》读书笔记之final
- Java编程思想读书笔记之对象导论
- Java 编程思想读书笔记(一)---多态
- Java编程思想读书笔记(第2-7章)
- Java编程思想读书笔记
- java编程思想读书笔记
- java 编程思想 读书笔记
- <<java编程思想>>读书笔记
- 方程式编程思想 读书笔记
- java编程思想读书笔记
- java编程思想读书笔记
- 《Java编程思想》读书笔记
- 《c++编程思想》读书笔记
- (转载)Windows NT安全性理论与实践
- (转载)Honeypot技术讲解
- 关于中断的详细阐述,包括如何写中断服务程序
- Linux路由器配置实例
- (转载)Windows NT/2000下的空连接
- C++编程思想读书笔记--之static
- fso对象完成对硬盘文件的处理
- (转载)理解IDS的主动响应机制
- (转载)高级扫描技术及原理介绍
- (转载)如何降低IDS的漏报和误报
- Intro of Symbian
- 今天截了一个图,是TM3.0在Windows 2003中的出错效果~
- CIO如何转型
- VB版2004年度专家榜(2004年度发的回复所得分)