C/C++ static用法
2024-08-31 09:23:30
这篇文章没有太多的实际内容,简单记录下static的用法。顺便试一下用markdown来写文章。
1. 在函数中使用
我们都知道在一个函数中的变量是存储在栈区中,函数的每一次调用都伴随着变量的重新定义和销毁。如果在变量前面加上static关键字,这个变量就会在程序的静态存储区。这个变量只会在第一次调用函数的时候定义并初始化。当再次调用函数时,会保留上次的值。例子:
int showNum()
{
static int num = 0;
return num++;
}
int main()
{
for(int i=0;i<10;i++)
{
cout << showNum() << endl;
}
return 0;
}//打印0到9
2. 在类中使用
这里面规则有点多,我直接上代码,然后比较好说明:
class X{
int i;
static int j;
public:
X(int ii = 6) : i(ii){
//非静态成员函数可以访问静态成员函数和变量
j = i;
}
int val(){return j;}
static int incr(){
return ++j;
}
static int f()
{
return incr();
}
};
int X::j = 0;
int main()
{
X x;
X* xp = &x;
cout << x.f() << endl;
cout << xp->f() << endl;
cout << X::f() << endl;
cout << sizeof(X) << endl;
return 0;
}
有下面几个要点:
- 静态成员变量属于类,不属于任何一个对象,必须在类外初始化。(int X::j = 0)
- 静态成员函数只能访问静态成员,非静态成员函数可以访问静态成员。
- 可以用类名::这样的形式访问静态成员变量和静态成员函数。
上面sizeof(X)的结果是4,说明静态成员变量j是放在静态存储区域。每个对象的成员变量都是独立的,而静态成员是所有对象共享,它没有this指针,所以静态成员函数只能访问静态成员变量。
3. translation unit 隐藏
这个translation unit我也不知道该怎么翻译,就理解为一个源文件吧。static还有一个作用就是,声明为static的变量和函数只在该文件(translation unit)有效,在其他文件中不能访问。这在大型工程中,能有效避免命名重复。
markdown写东西果然爽,不过以前中文格式看习惯了,谁能告诉我,首行缩进两个字这个需求该怎么办到。
最新文章
- eclipse 3.6 + tomcat 6.0 开发SSH框架学习
- Android处理图片OOM的若干方法小结 (推荐)
- 那些SQL语句
- koa-router
- PAT基础6-11
- SQL Server2008 18456错误
- BZOJ5317 JSOI2018部落战争(凸包)
- Golang对文件读写操作
- 34.scrapy解决爬虫翻页问题
- vue+大文件分片上传
- wx.aui.AuiManager部分/布局翻译
- hbase权限管理
- Java访问http用户验证
- JDK源码(1.7) -- java.util.ListIterator<;E>;
- JS取整,四舍五入,取绝对值等Math对象常用方法
- ceph journal更换位置
- php 验证访问浏览器是电脑还是手机
- 用MathType编辑异或与非符号有什么方法
- javascript onclick 函数不执行
- AngularJs学习笔记(1)——ng-app
热门文章
- 2016.3.14__CSS 定位__第六天
- [React] Public Class Fields with React Components
- 用DOM4J包实现对xml文件按属性分离。
- 将asp.net core2.0项目部署在IIS上运行
- Weblogic中可以使用的脚本
- 简洁常用权限系统的设计与实现(四):不维护level,用递归方式构造树
- 【Qt程序】基于Qt词典开发系列&;lt;十二&;gt;呼叫讲述
- KVM,QEMU核心分析
- Compile Graphics Magick, Boost, Botan and QT with MinGW64 under Windows 7 64
- 从文件 I/O 看 Linux 的虚拟文件系统