📜  c++ 初始化静态变量 - C++ (1)

📅  最后修改于: 2023-12-03 14:39:54.903000             🧑  作者: Mango

C++ 初始化静态变量

在C++中,静态变量是在程序运行之前分配的存储空间,初始化就是将存储空间中的值设置为特定的值。静态变量可以在编译时初始化,也可以在运行时初始化,但是需要注意一些细节。

编译时初始化

当静态变量在定义时被初始化,编译器会将初始化值嵌入到可执行文件中,不需要在运行时再做初始化。如下所示:

#include <iostream>
using namespace std;

class Foo {
public:
  static int s_value;
};

int Foo::s_value = 1; // 静态变量初始化

int main() {
  cout << Foo::s_value << endl;
  return 0;
}

在这个例子中,s_value被设置为1,因为在定义时已经被初始化了。此代码将输出 1

运行时初始化

当静态变量未在定义时初始化,需要在程序运行时初始化。需要在类的定义外部定义静态变量并初始化。 如下所示:

#include <iostream>
using namespace std;

class Foo {
public:
  static int s_value;
};

int Foo::s_value; // 静态变量定义

int main() {
  Foo::s_value = 2; // 静态变量初始化
  cout << Foo::s_value << endl;
  return 0;
}

在这个例子中,s_value首先在类的外部定义,但不初始化,然后在 main 函数中初始化。此代码将输出 2

需要注意的是,在多个文件中定义静态变量时,它只能在一个文件中初始化,否则会发生重定义错误。为了解决这个问题,可以将定义和初始化分开,将初始化放在某个文件中。如下所示:

// file1.cpp
#include "foo.h"
int Foo::s_value; // 静态变量定义

// file2.cpp
#include "foo.h"
#include <iostream>
using namespace std;
int main() {
  Foo::s_value = 3; // 静态变量初始化
  cout << Foo::s_value << endl;
  return 0;
}
静态常量

静态常量是一种特殊的静态变量,它们是不可变的。它们必须在类内部初始化,不能在运行时初始化。如下所示:

#include <iostream>
using namespace std;

class Foo {
public:
  static const int s_value = 4;
};

int main() {
  cout << Foo::s_value << endl;
  return 0;
}

在这个例子中,s_value被设置为4,因为它是一个静态常量。此代码将输出 4

静态常量的值可以在编译时使用,因为它们是不可变的,编译器将在编译时优化代码。