在 C 中,static 有两种用法:
1、使用static关键字来限制var在翻译单元中的作用域。为了简单起见,如果您有两个文件:a.c、b.c,并且您写道:
static int varA;
在a.c中,那么这意味着varA只能在a.c中使用,如果要在b.c中使用varA,则应删除static关键字,并添加extern int varA;在b.c中,人们通常做的是我们创建另一个名为:a.h的文件,并在a.h中写入extern int varA;,我们只需在include "a.h"中写入include "a.h"b.c,这样我们就可以写入我们想要的每个变量extern in a.h 并使用单个 include "a.h" 使这些变量或函数在其他 .c 文件(即源文件)中合法
2、在函数中使用static定义local variable,例如:
int TheFunction()
{
static int var = 0;
return ++var;
}
因为您在局部变量var 上使用了static 关键字,所以返回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 这是一个静态成员变量。
#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();
在a.c中,所以只能在a.c中调用StaticFunction(),如果你想在b.c中调用这个函数,你应该去掉static关键字,然后在使用前删除它。或者只是在a.h 和include "a.h" 在b.c 中声明它