📅  最后修改于: 2023-12-03 14:39:54.903000             🧑  作者: Mango
在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
。
静态常量的值可以在编译时使用,因为它们是不可变的,编译器将在编译时优化代码。