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