C++中的static深度剖析
来源:互联网 发布:关系数据库是什么 编辑:程序博客网 时间:2024/06/18 11:47
C++中的static
static的作用
在C语言中,static的作用有两个:
一是使得static声明的变量只能在当前文件中被访问,即当其他的文件中想通过像使用全局变量一样(如:extern int i;)使用static声明的变量时,就会在link的时候出错。其功能就相当于使得该文件中static声明的变量隐藏于该文件中而不被其他文件所发现。
其第二个作用是使得static声明的变量持久,即如果在一个函数中声明的一个static的变量,那么这个变量就会作为全局变量使用,即便是在退出该函数之后(程序未结束),该static变量任然存在。
在C++中static的作用:
在c++中,static就只是起到了持久(persistent)的作用,因为隐藏的作用是通过类来实现的。
在C++中,类的成员和函数都可以声明为static的。但是用法上有如下的一些规则:
a. static的成员变量在初始化时,只能通过definition来初始化,不能通过initialize list来初始化。原因是在C++中,class是一个声明而非一个定义,其定义需要另外进行,所以static的成员变量在class中还只是一个声明,只有在定义时,才能被声明,在initialize list的时候其是不存在的,只有在initialize list过了该变量才能说是被定义了。
b. 除了在class中需要声明static的变量外,还需要在相应的.cpp文件里定义该变量,如果class A 中有static int i,则必须在.cpp中有int A::i;这就是A中static的成员变量的定义,如果没有这样的定义,static的变量是不允许被使用的。
c. static的成员函数只允许访问static的成员变量而不允许访问其他的成员变量,原因是static的东西是属于类的,而该类的某个对象,如果允许static的函数访问成员变量的话,那么当对象没有被创建时,非static的成员变量是不存在的,会访问出错。归根究底,由于每个对象都会有一个this指针隐式地传入其成员函数中,但是static地成员函数可以在对象创建之前就对static地变量进行访问,这时没有this指针,所以不能访问非static地成员变量。
d. 在对static的变量和成员函数进行访问时,如果都是public的话,可以直接使用A::i或A::fun()来进行访问,但是只要不是public,则不能这样访问,只能通过相应的公有static函数来进行访问。
- C++中的static深度剖析
- 深度剖析static关键字
- static C/C++剖析
- static 剖析(C++)
- 《C语言深度剖析》学习笔记----C语言中的符号
- C语言深度剖析-----C语言中的字符串
- C语言深度剖析
- C语言深度剖析
- 《C语言深度剖析》
- C语言深度剖析
- C语言深度剖析
- C语言深度剖析
- C语言深度剖析
- 11.读c语言深度剖析 -- auto register static sizeof signed、unsigned
- c语言深度剖析 -- 读书笔记
- 《c语言深度剖析》笔记
- C语言深度剖析--枚举
- C语言深度剖析-预处理
- Fragment在不同情况下的生命周期
- linux下打包压缩工具
- 面试准备之JVM的组成、垃圾回收机制
- 用python实现解常微分方程组的简单示例以及用odeint解常微分方程的范例
- vue2+ueditor+springboot
- C++中的static深度剖析
- K-近邻算法—简述基本原理与实战
- Oracle 数据类型之 Number
- vlan vtp配置
- Mondriaan's Dream POJ
- 1078. Hashing (25)
- 运维基础2
- HDU
- Redis学习07——存储有序字符串集合(sorted set)