2014年1月19日? ?内容整理自The Cherno:C++系列
---------------------------------------------------------------------------------------------------------------------------------
static关键字在C++中有2个意思,这取决于上下文
1.在类或者结构体的外部使用static关键字
2.在类或者结构体内部使用static关键字
简而言之:
1.类或结构体外部的static,意味着你声明为static的符号将只能对你定义它的翻译单元可见
2.而类或结构体内部的静态变量static,意味着这个变量将于所有类的实例共享内存,这意味着该静态变量在你在类中创建的所有实例中。
---------------------------------------------------------------------------------------------------------------------------------
现在我们集中研究在类或结构体外部的static变量
//在具有如下两个文件main.cpp和Static.cpp的情况下运行代码,没有报错
然而,让我们在Static.cpp中删除关键字static,再次运行报错,原因是多重定义了全局变量s_Variable
so,我们不可以在同一个项目中有两个同名的全局变量-
在某个.cpp文件中将变量声明为static,可以类比于在类中声明一个private的变量,其他的所有翻译单元都不能看到这个s_variable变量,the linker will not see this in a global scope?
尝试在Static.cpp中定义一个函数试试 ,仍显示重复定义
尝试将Static.cpp中的function(){}函数标记为static的,点击运行,就不会报错了
?
如果你想在头文件中声明一个静态变量,并将该头文件包含在两个不同的C++文件中,这就相当于在两个文件中都声明了相同的静态变量?
---------------------------------------------------------------------------------------------------------------------------------
如果你把static和变量一起使用,这意味着在类的所有实例中,这个变量都只有一个实例
如果我创建一个名为Entity的类,我不断创建Entity的实例,我仍然只会得到那个变量的一个版本
意思是如果某个实例改变了这个静态变量----在这个类中的所有实例都会反映这个变化。
so,通过类的实例来引用静态变量是没有意义的。
示例1:
在上述代码中将x,y变成静态的?,main函数中的初始化就会失败,因为x和y不再是类成员
解决方案:定义x和y
?
//这里有点乱了,下次回来改?