(阅读《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类似

最新文章

  1. Redis一些基本的操作
  2. Optimize str2date function
  3. Android 系统移植与驱动开发--第二章搭建Android环境核心步骤及心得
  4. Webservice-Java-Xfire
  5. LPCTSTR
  6. .NET中lock的使用方法及注意事项
  7. shell脚本作为保证PHP脚本不挂掉的守护进程实例
  8. Linux Samba服务主配文件smb.conf中文详解
  9. IOS9提示“不受信任的开发者”如何处理
  10. python 在大文件里面删除某一行,比较有效率的方法
  11. StackExchange.Redis 二次封装
  12. 帆软报表(finereport)安装/配置
  13. Kali Linux搭建Go语言环境
  14. SET NOCOUNT { ON | OFF }
  15. php上传多张图片
  16. Good Bye 2016 F.New Year and Finding Roots(交互)
  17. Android开发学习笔记-自定义组合控件
  18. Java何时该使用覆盖?
  19. 【模板】deque实现单调队列
  20. ESB的几个基本概念

热门文章

  1. css 浮动的知识点
  2. MVC中 global.asax
  3. 线段树(SegmentTree)基础模板
  4. 有关List、Set、Map的基础了解
  5. Java程序员必备的一些流程图
  6. CSS3背景定位 background-origin
  7. Acwing-281-硬币(背包)
  8. QT之QChar
  9. 微信小游戏egret开发包括p2引擎小结
  10. 【CF521C】Pluses everywhere(贡献)