关于c++static关键字和extern关键字

来源:互联网 发布:排序算法适用情况 比较 编辑:程序博客网 时间:2024/05/12 04:10

1.static用于变量

当我们将变量声明为static类型,如:static int n=0,这就告诉编译器记住第一次的声明,以后再重复使用时不再声明,相当于在文件内定义一个全局变量下面给出一个例子:

在一个函数内:

void function()

{

static int i=0;

cout<<i<<endl;

i++;

}

int main()

{

function();

function();

return 0;

}

output:

0

1

2.static用于函数

当我们在函数前加上static,这就告诉编译器这个函数是静态编译的,也就是说你可以在其他文件中定义相同的函数而编译器不会编译报错。

如:

int file1.cpp

static void function();

 

int file2.cpp

void function();

当编译链接时不会报错的。(相当于将两个函数取不同的名字,但函数体相同)

 

3.static用于类内变量

当将类内的变量声明为static,这就告诉编译器该变量属于类,而不属于某个特定的对象,相当于所有对象都共享这个变量,例如:

class CButton

{

static int m_X;

public:

CButton():m_X++{ cout<<m_X<<endl;}

~CButton():m_X--{cout<<m_X<<endl;}

};

CButton::m_X=0;

intput:

int main()

{

CButton *mybuttonApp=new CButton;

delete mybuttonApp;

return 0;

}

output:

1

0

4.static 用于类内函数

当将类内的函数声明为static,这就告诉编译器这个函数在类没有产生对象时就可以使用,并且这个函数只能调用静态变量

5.extern用于变量

当变量声明为extern时,这就告诉编译器这个变量用的是外部的某个变量,并且已经在外部文件中被定义,一般使用在跨文件使用全局变量,例如

在文件file2中用到文件file1中的变量:

//in file1.cpp

int  gn_X=10;

//in file2.cpp

extern int gn_X;   //这个gn_X不能赋值,否则出错

这样程序中就可以像在一个文件中使用全局变量一样使用这个gn_X了。