这篇文章没有太多的实际内容,简单记录下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;
}

有下面几个要点:

  1. 静态成员变量属于类,不属于任何一个对象,必须在类外初始化。(int X::j = 0)
  2. 静态成员函数只能访问静态成员,非静态成员函数可以访问静态成员。
  3. 可以用类名::这样的形式访问静态成员变量和静态成员函数。

上面sizeof(X)的结果是4,说明静态成员变量j是放在静态存储区域。每个对象的成员变量都是独立的,而静态成员是所有对象共享,它没有this指针,所以静态成员函数只能访问静态成员变量。

3. translation unit 隐藏

这个translation unit我也不知道该怎么翻译,就理解为一个源文件吧。static还有一个作用就是,声明为static的变量和函数只在该文件(translation unit)有效,在其他文件中不能访问。这在大型工程中,能有效避免命名重复。

markdown写东西果然爽,不过以前中文格式看习惯了,谁能告诉我,首行缩进两个字这个需求该怎么办到。

最新文章

  1. eclipse 3.6 + tomcat 6.0 开发SSH框架学习
  2. Android处理图片OOM的若干方法小结 (推荐)
  3. 那些SQL语句
  4. koa-router
  5. PAT基础6-11
  6. SQL Server2008 18456错误
  7. BZOJ5317 JSOI2018部落战争(凸包)
  8. Golang对文件读写操作
  9. 34.scrapy解决爬虫翻页问题
  10. vue+大文件分片上传
  11. wx.aui.AuiManager部分/布局翻译
  12. hbase权限管理
  13. Java访问http用户验证
  14. JDK源码(1.7) -- java.util.ListIterator&lt;E&gt;
  15. JS取整,四舍五入,取绝对值等Math对象常用方法
  16. ceph journal更换位置
  17. php 验证访问浏览器是电脑还是手机
  18. 用MathType编辑异或与非符号有什么方法
  19. javascript onclick 函数不执行
  20. AngularJs学习笔记(1)——ng-app

热门文章

  1. 2016.3.14__CSS 定位__第六天
  2. [React] Public Class Fields with React Components
  3. 用DOM4J包实现对xml文件按属性分离。
  4. 将asp.net core2.0项目部署在IIS上运行
  5. Weblogic中可以使用的脚本
  6. 简洁常用权限系统的设计与实现(四):不维护level,用递归方式构造树
  7. 【Qt程序】基于Qt词典开发系列&amp;lt;十二&amp;gt;呼叫讲述
  8. KVM,QEMU核心分析
  9. Compile Graphics Magick, Boost, Botan and QT with MinGW64 under Windows 7 64
  10. 从文件 I/O 看 Linux 的虚拟文件系统