在 C 中,static
有两种用法:
1、使用static
关键字限制var在翻译单元中的作用域。为了简单起见,如果您有两个文件:a.c
,b.c
并且您写道:
static int varA;
in a.c
,那么这个意思varA
只能用 in a.c
,如果要使用varA
in b.c
,你应该去掉static
关键字,然后加上extern int varA;
in b.c
,人们通常做的就是我们创建另一个名为 :的文件a.h
,然后写入extern int varA;
in a.h
,我们简单地include "a.h"
in b.c
,所以我们可以编写我们想要外部的每个变量a.h
并使用单个include "a.h"
变量使这些变量或函数在其他.c
文件(即源文件)中合法
2、用于在函数static
中定义a local variable
,例如:
int TheFunction()
{
static int var = 0;
return ++var;
}
因为你static
在局部变量上使用了关键字,所以这个变量在返回var
时不会丢失。TheFunction()
第一次打电话TheFunction()
会收到1
,第二次打电话TheFunction()
会收到2
,以此类推。
接下来,让我们看看静态在 C++ 中的用法。
因为任何 C++ 编译器都可以编译 C 代码,所以上面的 2 个用法也在 C++ 中。
另外两种用法是: 1、静态成员变量。2、静态成员函数。
直接看代码:
#include <iostream>
using namespace std;
class Test
{
public:
Test() : m_nNormalVar(0)
{
}
public:
// You need to init this static var outside the class
// using the scope operator:
// int Test::m_nStaticVar = 0;
static int m_nStaticVar;
// You can init this const static var in the class.
const static int m_nConstStaticVar = 10;
// This is just a normal member var
int m_nNormalVar;
};
int Test::m_nStaticVar = 0;
int main(int argc, char *argv[])
{
Test a;
Test b;
a.m_nStaticVar++;
a.m_nNormalVar++;
cout << b.m_nStaticVar << endl;
cout << b.m_nNormalVar << endl;
return 0;
}
a
并且b
是类的对象,Test
它们具有相同m_nStaticVar
的和相同的m_nConstStaticVar
,但它们有自己的m_nNormalVar
this 是一个静态成员变量。
#include <iostream>
using namespace std;
class Utility
{
public:
// This is a static member function, you don't
// need to have a concrete object of this class
// to call this function.
static int SelectMax(int a, int b)
{
return a > b ? a : b;
}
};
int main(int argc, char *argv[])
{
// No objects of class Utility
cout << Utility::SelectMax(2, 1) << endl;
return 0;
}
所以这是 C++ 中类的静态成员函数。
这四种static的用法我都知道了,如果还有其他用法,请帮忙编辑本帖,thx:)
编辑:
添加静态全局函数
1、使用static
关键字限制函数在翻译单元中的作用域。为了简单起见,如果您有两个文件:a.c
,b.c
并且您写道:
static void StaticFunction();
in a.c
,所以你只能调用StaticFunction()
in a.c
,如果你想调用这个函数,b.c
你应该删除static
关键字,然后在使用前删除它。或者只是在里面声明a.h
它include "a.h"
b.c