【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 ...
随机推荐
- centos7安装kong和kong-dashboard
1.安装Kong yum install -y https://kong.bintray.com/kong-community-edition-rpm/centos/7/kong-community- ...
- 弹出框 popover.js
弹出框 popover.js 为任意元素添加一小块浮层,就像 iPad 上一样,用于存放非主要信息. 弹出框的标题和内容的长度都是零的话将永远不会被显示出来. 插件依赖 弹出框依赖 工具提示插件 ,因 ...
- Spring MVC 基于AnnotationFormatterFactory接口实现自定义的规则
1.创建一个类来实现AnnotationFormatterFactory接口 代码: package com.oukele.CustomAnnotation; import com.oukele.mo ...
- dlsym用法
1. 包含头文件 #include<dlfcn.h> 2. 函数定义 void *dlsym(void *handle, const char* symbol); handle是使用dlo ...
- 对JS继承的研究--------------引用
问:类继承和原型继承不是同一回事儿吗,只是风格选择而已? 答:不是! 类继承和原型继承不论从本质上还是从语法上来说,都是两个截然不同的概念. 二者之间有着区分彼此的本质性特征.要完全看懂本文,你必须牢 ...
- python5---输入用户名和密码,登录三次不成功,无法再次登录
#!/usr/bin/env python_user = "harry"_password = "123456"for i in range(3): usern ...
- 一种sqlor的拆分
原脚本declare @Phone nvarchar(50)declare @CompanyNO nvarchar(50)set @Phone='13914124223'set @CompanyNO= ...
- VS2015安装QT插件
下载安装完后直接重新启动vs
- 【杂题】[AGC034F] RNG and XOR【集合幂级数】【FWT】【DP】
Description 你有一个随机数生成器,它会以一定的概率生成[0,2^N-1]中的数,每一个数的概率是由序列A给定的,Pi=Ai/sum(Ai) 现在有一个初始为0的数X,每一轮随机生成一个数v ...
- 【HDOJ5943】Kingdom of Obsession(数论)
题意:给定n个人,n个座位,人的编号是[1,n],座位的编号是[s+1,s+n],编号为i的人能坐在编号为j的座位上的条件是j%i=0 问是否存在一组方案使得座位和人一一对应 n,s<=1e9 ...