【C++学习笔记】static 关键字
(阅读《C++ primer plus》可知 C++的static关键字跟Java还是很类似的)
为什么需要static关键字:在文件A中定义的非局部变量language,在文件B中可以通过 extern string language进行引用; 这样一来,在B文件中就可以使用language了,而且B中的language和A中的language是同一个变量,指向同一个地址。如果不加extern,直接在B文件中申明string language是会报错的,因为A文件中的language是外向链接的,相当于全局变量,而C++有着单定义规则,一个变量在一个程序中不能定义两次。如果B中必须要有一个string language,并且是B自己的,与A中language无关的变量,则这时候需要使用static,static实际上指明了language的链接性是文件内部的,只在B文件内有效,并且B中language会hide掉A中的language
例子,文件A内容如下
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
string language = "us";
void display();
int main()
{
cout << "language in main: " << language << endl;
display();
cin.get();
return ;
}
文件B
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
static string language = "cn"; void display()
{
cout << "language in support: " << language << endl;
}
输出

倘若文件B里去掉static关键字,将出现重复定义。B文件里static的意思是告诉编译器,
1.该language作用域为B文件;
2.在程序运行期间持续驻留内存
3.覆盖A文件中定义的全局变量language,因此在B文件中的language都是"cn"
上面的例子中,没有说明类的static变量的i情况,补充如下:
1.类的static变量是属于类而非对象的,即所有对象共有一份该变量,这与Java类似
【C++学习笔记】static 关键字的更多相关文章
- Java学习笔记——static关键字与静态的使用方法
static:可以修饰成员变量和成员方法. 当变量被static修饰后,则其可以直接被类名调用.类名.成员. static特点: 随着类的加载而加载: 优先于对象存在: 被所有的对象共享,节省空间,但 ...
- Java再学习——深究static关键字
一.static关键字的用途 可以在没有创建对象的情况下来进行(方法/变量)调用.也就是,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问. ...
- [OC笔记] static 关键字
在变量声明前加上static关键字,可以使局部变量保留多次方法调用所得到的值.当多个方法对一个静态变量进行操作时,多个方法共享同一个静态变量的值.
- java学习笔记11-static关键字
如果在类中使用static关键字创建方法,这种方法称为类方法,可以在这个类中直接引用.而不是用static创建的方法.这种方法称为对象方法(实例方法),需要创建对象后才能使用. package les ...
- java基础学习总结——static关键字
一.static关键字
- Java学习:static 关键字概述
static 关键字概述 一旦用了static关键字,那么这样的内容不再属于对象自己.而是属于类的,所以凡是本类的对象,都共享同一份. 如果没有static关键字,那么必须首先创建对象,然后通过对象才 ...
- Java学习笔记18---final关键字修饰变量、方法及类
英语里final这个单词大家都知道是"最终的"意思,其实还有一个意思是"不可更改的".在Java里,final关键字作"不可更改的"来解释更 ...
- C++学习笔记-static
static做为关键字,在C++语言中运用在类中,代表着这个属性或者方法属于这个类 如果生成的对象修改了这个成员,那么其他对象共享修改后的值 定义和初始化 class ABC { public: in ...
- 《C语言深度解剖》学习笔记之关键字
第一章 关键字 C语言共有32个关键字. 关键字 auto 声明自动变量 int 声明整型变量 long 声明长整型变量 char 声明字符型变量 float 声明浮点型变量 short 声明短整 ...
- jquery学习笔记---this关键字
1. 在JavaScript的变量作用域里有一条规则“全局变量都是window对象的属性”.当执行 checkThis() 时相当于 window.checkThis(),因此,此时checkT ...
随机推荐
- Linux下内存查看及详解
在Linux下面,我们常用top命令来查看系统进程,top也能显示系统内存.我们常用的Linux下查看内容的专用工具是free命令. Linux下内存查看命令free详解: 在Linux下查看内存我们 ...
- BZOJ2656 [Zjoi2012]数列(sequence)[模拟]
这个递推式子可以发现$i$是偶数下标可以缩一半,是奇数下标就可以拆成两个下标,$\lfloor \frac{i}{2} \rfloor$以及$\lfloor \frac{i}{2}+1 \rfloor ...
- java文件上传下载解决方案
javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 <form id=" ...
- TTTTTTTTTTTTTTTTT CF #182 div1 B floyd
题意: 有 n(3≤n≤100) 个站点,当第一次到达站点 u 的时候会增加寿命 au(1≤au≤103),题目给了 n 个站点的二位空间坐标,每两个站点之间的距离为曼哈顿距离(dis(i, j)=| ...
- 小程序上传wx.uploadFile - 小程序请假-请求
小程序上传wx.uploadFile UploadTask wx.uploadFile(Object object) 将本地资源上传到服务器.客户端发起一个 HTTPS POST 请求,其中 cont ...
- Springboot 系列(十七)迅速使用 Spring Boot Admin 监控你的 Spring Boot 程序,支持异常邮件通知
1. Spring Boot Admin 是什么 Spring Boot Admin 是由 codecentric 组织开发的开源项目,使用 Spring Boot Admin 可以管理和监控你的 S ...
- [负数在内存中的存储] 0x80000000 = -2147483648
https://blog.csdn.net/youyou362/article/details/72667951/ 1. 十进制负数以其补码存储在内存上 例子:-8 在内存中表示为:1111 1111 ...
- R_Studio模拟学生成绩对数据简单分析
模拟产生学生名单,记录高数,英语,网站开发三科成绩,然后进行统计分析 假设有100名学生,起始学号为161304000,各科成绩取整 高数成绩为均匀分布随机函数,都在75分以上 英语成绩为正态分布,平 ...
- php的while函数
PHP while 循环 PHP Switch PHP For 循环 PHP while 循环在指定条件为 true 时执行代码块. PHP 循环 在您编写代码时,经常需要反复运行同一代码块.我们可以 ...
- [BZOJ2286][Sdoi2011]消耗战(虚树上DP)
2286: [Sdoi2011]消耗战 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 6457 Solved: 2533[Submit][Statu ...