这篇文章没有太多的实际内容,简单记录下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. USB 3.0规范中译本 第10章 集线器,主机下行口以及设备上行口规范

    本文为CoryXie原创译文,转载及有任何问题请联系cory.xie#gmail.com. 本章描述USB 3.0 集线器的体系结构要求.本章还描述主机下行口和集线器下行口之间功能性的不同之处,以及设 ...

  2. [SCSS] Reuse Styles with the SCSS @extend Directive

    We can write reusable styles with the SCSS @extend or @mixin directives. Which one is better? It dep ...

  3. 【37%】【poj1436】Horizontally Visible Segments

    Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5200   Accepted: 1903 Description There ...

  4. uml精粹——11.活动图(及整个读书笔记分享)

    11.活动图activity diagram   活动图是描写叙述过程化逻辑procedural logic.业务过程business process和工作流work flow的技术. 他和流程图fl ...

  5. 数据预处理(normalize、scale)

    matlab 工具函数(三)-- normalize(归一化数据) 注:待处理的数据 X∈Rd×N,N 表示样本的个数,d 则是单个样本的维度: 1. 去均值(remove DC) X = bsxfu ...

  6. Codeforces Round #443 (Div. 2) C: Short Program - 位运算

    传送门 题目大意: 输入给出一串位运算,输出一个步数小于等于5的方案,正确即可,不唯一. 题目分析: 英文题的理解真的是各种误差,从头到尾都以为解是唯一的. 根据位运算的性质可以知道: 一连串的位运算 ...

  7. 【b504】等价表达式(NOIP2005第4题)

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数 ...

  8. 【b303】加分二叉树

    [题目链接]:https://vijos.org/p/1100 [题意] [题解] 因为已经确定了最后中序遍历的结果为1..n; 所以对于每一个区间[l..r] 你需要确定这个区间里面哪一个是这个子树 ...

  9. 增删改查 T-SQL最基本操作

    use test --操作test表 go --查询 select * from stu -- 查询stu里的所有数据 select top 3 * from stu -- 查询stu里前三行数据 s ...

  10. zzuli OJ 1129: 第几天

    Description 你知道.2012-1-1是该年的第1天.而9999-9-9呢?给你一个详细的日期,计算该日期是该年的第几天. Input 输入一个日期.格式为:Year-month-day.y ...