何时使用静态变量 C++

yae*_*viv 5 c++ static global-variables extern

我困惑的使用有点static/ global/ global static/extern变量。

我希望在创建类实例时增加一个计数器变量。

如果有人可以为每个人发布适当用法的说明,将不胜感激。

Rob*_*Hsu 5

根据 OO 概念,您永远不应该使用全局静态变量。您可以改为在您的类中定义一个静态变量,用于您的类的实例计数。将其设为私有,以便除了您的构造函数之外没有其他人可以增加计数。提供一个公共函数来获取计数器。请参阅下面的示例:

你的类.h:

class YourClass {
private:
    static int instanceCount_;
public:
    YourClass() {++YourClass::instanceCount_;}  // constructor
    ~YourClass() {--YourClass::instanceCount_;} // destructor
    static int instanceCount() {return instanceCount_;}
};
Run Code Online (Sandbox Code Playgroud)

你的类.cpp:

int YourClass::instanceCount_ = 0;
Run Code Online (Sandbox Code Playgroud)

至于静态/全局/全局静态/外部的概念 1.静态:1a)全局静态:静态变量形式如下:

static int numberOfPersons;
Run Code Online (Sandbox Code Playgroud)

这种变量只能在一个文件中看到(不会与其他文件中的其他相同变量名发生名称冲突)

1a) class static:(在上面的实例计数中已经有一个例子)一个类可能有静态成员,这些成员只对该类可见(只能通过 Class::Var 形式访问)(而不是上面所说的“仅文件” )。它不会与其他类中的相同变量名称发生名称冲突。每个类(不是每个实例)只有一个副本。

1b) 全局静态和类静态都是全局的。(因为它们可以被全局访问,无论是否使用类限定符“Class::”。

所以,1a。和 1b。解释静态,全局,全局静态,呃,部分解释,见下面2.

  1. 另一种形式的全局变量,只是定义一个没有“静态”的变量,如下所示:

    int numberOfPersons;

如果没有 'static',这个变量可以被其他文件看到,使用 'extern' 关键字。并且它会与其他文件中的相同变量发生名称冲突。因此,在全局范围内,您只能在所有源文件中定义它一次。

  1. extern:声明一个在其他地方定义的变量/函数。它通常出现在头文件中。如3.中所述,您可以在其他文件中定义一些变量,并将此变量声明为extern,如下所示,在另一个使用它的源文件中。extern int numberOfPersons;

    int addPersonCount() { numberOfPersons++; }

希望这可以帮助。