这篇文章没有太多的实际内容,简单记录下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写东西果然爽,不过以前中文格式看习惯了,谁能告诉我,首行缩进两个字这个需求该怎么办到。

C/C++ static用法的更多相关文章

  1. 从零开始学C++之对象的使用(二):四种对象生存期和作用域、static 用法总结

    一.四种对象生存期和作用域 栈对象 隐含调用构造函数(程序中没有显式调用) 堆对象 隐含调用构造函数(程序中没有显式调用),要显式释放 全局对象.静态全局对象 全局对象的构造先于main函数 已初始化 ...

  2. 四种对象生存期和作用域、static 用法总结

    一.四种对象生存期和作用域 栈对象 隐含调用构造函数(程序中没有显式调用) 堆对象 隐含调用构造函数(程序中没有显式调用),要显式释放 全局对象.静态全局对象 全局对象的构造先于main函数 已初始化 ...

  3. C语言中static用法介绍

    C语言中static用法介绍     对于新手来说,很多东西的用法还不是很清楚,我们今天一起来看看C语言中static用法介绍     1.声明了static的变量称为静态变量,根据作用域的不同又分为 ...

  4. static用法总结

    C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. 一.面向过程设计中的st ...

  5. c++ static用法总结【转载】

    static关键字是C, C++中都存在的关键字.static从字面理解,是“静态的“的 意思,与此相对应的,应该是“动态的“. static的作用主要有以下3个: 1.扩展生存期: 2.限制作用域: ...

  6. (转-经典-数据段)C++回顾之static用法总结、对象的存储,作用域与生存期

    转自:https://blog.csdn.net/ab198604/article/details/19158697相关知识补充:https://www.cnblogs.com/rednodel/p/ ...

  7. c/c++中static用法总结

    static的作用主要有两种: 第一个作用是限定作用域:第二个作用是保持变量内容持久化: c语言中static的用法: 1.全局静态变量: 用法:在全局变量前加上关键字static,全局变量就定义成一 ...

  8. 【C++初级】static用法总结、问题探讨及常见错误排查

    static的基本用法: static的作用主要有两种第一个作用是限定作用域:第二个作用是保持变量内容持久化: 一.c语言中static的用法: 1.全局静态变量: 用法:在全局变量前加上关键字sta ...

  9. java中静态代码块的用法 static用法详解和static静态导入

    (一)java 静态代码块 静态方法区别一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序 ...

随机推荐

  1. 【死磕Java并发】—–J.U.C之AQS(一篇就够了)

    [隐藏目录] 1 独占式 1.1 独占式同步状态获取 1.2 独占式获取响应中断 1.3 独占式超时获取 1.4 独占式同步状态释放 2 共享式 2.1 共享式同步状态获取 2.2 共享式同步状态释放 ...

  2. java中的subString具体解释及应用

    substring(參数)是java中截取字符串的一个方法 有两种传參方式 一种是public String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个 ...

  3. 图形界面Aardio

    用aardio给python写个图形界面 前阵子在用python写一些小程序,写完后就开始思考怎么给python程序配一个图形界面,毕竟控制台实在太丑陋了. 于是百度了下python的图形界面库,眼花 ...

  4. bash keys

    stty-a CTRL-S and CTRL-Q are called flow-control characters. Bash readline 使用技巧_Linux编程_操作系统_希赛网 htt ...

  5. CentOS-7-x86_64-DVD-1511.iso

    http://vault.centos.org/7.2.1511/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso

  6. js进阶 9-16 如何实现多选框全选和取消

    js进阶 9-16 如何实现多选框全选和取消 一.总结 一句话总结:选择取到每一个checkbox的值,然后赋值为true或者false就好. 1.如何实现多选框全选和取消? 选择取到每一个check ...

  7. 集群搭建Solr

    Solr集群搭建 SolrCloud需要solr基于zookeeper部署,zookeeper是一个集群管理软件,由于SolrCloud需要由多台服务器组成.由zookeeper来进行协调管理.Zoo ...

  8. WPF动画结束后的行为方式

    原文:WPF动画结束后的行为方式 在WPF中可以使用Animation来完成动画功能,如移动,旋转等,最近写的一个程序需要实现控件的移动,包括自动移动和手动控制.原理很简单,就是改变控件的Margin ...

  9. SQL表的最基本操作练习

    use test go --select * from stu2 drop table stu2--删除表 go create table stu2 --新建一个名为stu2表 ( id int pr ...

  10. Android之assets资源目录的各种操作

    第一种方法:       String path = file:///android_asset/文件名; 第二种方法:         InputStream abpath = getClass() ...