C/C++ static用法
这篇文章没有太多的实际内容,简单记录下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写东西果然爽,不过以前中文格式看习惯了,谁能告诉我,首行缩进两个字这个需求该怎么办到。
C/C++ static用法的更多相关文章
- 从零开始学C++之对象的使用(二):四种对象生存期和作用域、static 用法总结
一.四种对象生存期和作用域 栈对象 隐含调用构造函数(程序中没有显式调用) 堆对象 隐含调用构造函数(程序中没有显式调用),要显式释放 全局对象.静态全局对象 全局对象的构造先于main函数 已初始化 ...
- 四种对象生存期和作用域、static 用法总结
一.四种对象生存期和作用域 栈对象 隐含调用构造函数(程序中没有显式调用) 堆对象 隐含调用构造函数(程序中没有显式调用),要显式释放 全局对象.静态全局对象 全局对象的构造先于main函数 已初始化 ...
- C语言中static用法介绍
C语言中static用法介绍 对于新手来说,很多东西的用法还不是很清楚,我们今天一起来看看C语言中static用法介绍 1.声明了static的变量称为静态变量,根据作用域的不同又分为 ...
- static用法总结
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. 一.面向过程设计中的st ...
- c++ static用法总结【转载】
static关键字是C, C++中都存在的关键字.static从字面理解,是“静态的“的 意思,与此相对应的,应该是“动态的“. static的作用主要有以下3个: 1.扩展生存期: 2.限制作用域: ...
- (转-经典-数据段)C++回顾之static用法总结、对象的存储,作用域与生存期
转自:https://blog.csdn.net/ab198604/article/details/19158697相关知识补充:https://www.cnblogs.com/rednodel/p/ ...
- c/c++中static用法总结
static的作用主要有两种: 第一个作用是限定作用域:第二个作用是保持变量内容持久化: c语言中static的用法: 1.全局静态变量: 用法:在全局变量前加上关键字static,全局变量就定义成一 ...
- 【C++初级】static用法总结、问题探讨及常见错误排查
static的基本用法: static的作用主要有两种第一个作用是限定作用域:第二个作用是保持变量内容持久化: 一.c语言中static的用法: 1.全局静态变量: 用法:在全局变量前加上关键字sta ...
- java中静态代码块的用法 static用法详解和static静态导入
(一)java 静态代码块 静态方法区别一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序 ...
随机推荐
- 用JavaScript和CSS实现“在页面中水平和垂直居中”的时钟
思路:实现起来最麻烦的事实上是水平居中和垂直居中,当中垂直居中是最麻烦的. 考虑到浏览器兼容性,网上看了一些资料,发如今页面中垂直居中确实没有什么太好的办法. 于是就採用了position:fixed ...
- Android中动态设置GridView的列数、列宽和行高
在使用GridView时我们知道,列数是可以通过设计时的属性来设置的,列的宽度则是根据列数和GridView的宽度计算出来的.但是有些时候我们想实现列数是动态改变的效果,即列的宽度保持某个值,列的数量 ...
- AngularJS之watch
简介 首先apply方法会触发evel方法,当evel方法解析成功后,会去触发digest方法,digest方法会触发watch方法. 在digest执行时,如果watch观察的的value与上一次执 ...
- MD5工具类--可以直接拿来用不抛异常的MD5Util
public class MD5Util { private static String byteArrayToHexString(byte b[]) { StringBuffer resultSb ...
- Android BlueDroid(一):BlueDroid概述
关键词:bluedroid bluez作者:xubin341719(欢迎转载,请注明作者,请尊重版权,谢谢!)欢迎指正错误.共同学习.共同进步!! 一.名词解释:(实用信息添加中--) BTI F: ...
- 移动CMPP3.0接口
前段时间准备上线期,同事接了个联调CMPP3.0短信接口的任务,但是一直不成功,抽时间给解决了一下,记录下其中几个要点: 1.短信网关厂家需要提供参数: #网关IP地址 ismgIp=1.1.1.1# ...
- js一些编写的函数
第一:它是最常见的 function A(){ } 说明 A(); 第二: var B = function(){ } 方法 B();//这是匿名函数 第三: (function () { ...
- bootstrap paginator使用简述
1.引入bootstrap-paginator.js(依赖jquery)2.html部分需要一个ul标签,接下来我们会把该标签设置为分页组件 3.js部分(核心) 注意事项: 1.通过onPageCl ...
- 数据库版本管理工具Flyway——基础篇
Flyway 默认规约 SQL 脚本文件默认位置是项目的源文件夹下的db/migration 目录. Java 代码默认位于db.migration 包. SQL 脚本文件及Java 代码类名必须遵循 ...
- Cython 的学习
开发效率极高的 Python 一直因执行效率过低为人所诟病,Cython 由此诞生,特性介于 Python 和 C 语言之间. Cython 学习 1. Cython 是什么? 它是一个用来快速生成 ...