C++_CH14_static在类和结构体外使用
1.1 static的定义
一种是在类和结构体外面的static,一种是在类和结构体里面的static。
在类和结构体内部声明static,将使得class和struct与他们的instance共用内存。
本文只讨论在类和结构体外的static
1.2 代码
static int s_var = 6; //s_前缀代表该变量是静态的。
它的意思是,这个静态变量s_var只在当前文件起作用。
还是假如我们有两个文件:
math.cpp
和
main.cpp
math.cpp:
static int s_var = 6;
main.cpp:
#include<iostream>
int s_var = 8;
int main()
{
std::cout<<s_var<<std::endl;
}
这样运行并不会报错。但是,一旦我们去掉math.cpp中的static,就会产生链接错误。
math.cpp
int s_var = 10;
main.cpp:
#include<iostream>
int s_var = 8;
int main()
{
std::cout<<s_var<<std::endl;
}
解决方法之一就是在main里的s_var前面加上extern.这意味着它要在外部文件中找s_var这个变量。
math.cpp
int s_var = 10;
main.cpp:
#include<iostream>
extern int s_var;
int main()
{
std::cout<<s_var<<std::endl;
}
此时他是在math.cpp中找的s_var。
output:
10
但是我们重新对math.cpp中加上static
math.cpp
static int s_var = 10;
此时又会产生错误。因为即使extern是在外部找变量,但是static声明会让它找不到这个变量。