我应该在 C++ 中何时/为什么使用 STATIC?

when/why should i use static in c++?

本文关键字:STATIC 为什么 C++ 何时 我应该      更新时间:2023-10-16

我找到了为什么/何时应该使用静态声明变量?,但标签是关于objective-c的。

当您使用静态时,我无法确定 c++ 和 objective-c 之间的使用细节是否有任何区别,那么我何时/为什么要在 c++ 中使用静态?

static有几个独立的含义,具体取决于上下文。

void f() { ... }
static void g() { ... }

在这里,f具有"外部链接",这意味着它的名称在其他翻译单元中可见。也就是说,在另一个源文件中,您可以void f();,然后您可以调用函数f

另一方面,g因为它被标记为static,所以具有"内部联系"。可以从同一源文件中的代码调用它,但不能从另一个源文件调用它。

对象相同:

int i = 3;        // external linkage
static int j = 4; // internal linkage

还有一个小复杂:你可以在函数中定义一个静态对象。

void f() {
static int i = 3;
std::cout << i << 'n';
++i;
}

在这里,i没有联系。它仅在函数内部可见。它在第一次调用函数时初始化(如果未调用函数,则根本不会初始化(。因此,第一次调用f时,它会将"3"写入控制台。在第二次调用时,它将写入"4",依此类推。使用析构函数理解对象的行为留给读者作为练习。

在类定义中,它是完全不同的。

class C {
public:
void f();
static void g();
int i;
static int j;
};

在这里,当您调用f时,您必须在类型C的对象上调用它,并且f可以使用该对象的数据成员,也就是说,它可以查看和更改ij。调用g时,没有关联的对象。它仍然是C的成员,所以它可以查看和更改j,因为j也不与任何对象相关联。只有一个j,它由所有类型为C的对象共享。

相关文章: