在 C 中,static有两种用法:
1、使用static关键字限制var在翻译单元中的作用域。为了简单起见,如果您有两个文件:a.c,b.c并且您写道:
static int varA;
in a.c,那么这个意思varA只能用 in a.c,如果要使用varAin 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_nNormalVarthis 是一个静态成员变量。
#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