静态成员变量初始化方法
静态成员变量的初始化需要在类外部进行,以下是两种常见的静态成员变量初始化方法:
在类的定义外部显式初始化:
#include <iostream>
class MyClass {
public:
static int staticVariable;
};
// 在类外部进行定义和初始化
int MyClass::staticVariable = 10;
int main() {
std::cout << MyClass::staticVariable << std::endl; // 输出: 10
return 0;
}
在类内部使用静态成员初始化语法(C++17之后):
我们在类内部使用关键字 inline 定义和初始化了静态成员变staticVariable。
#include <iostream>
class MyClass {
public:
static inline int staticVariable = 10;
};
int main() {
std::cout << MyClass::staticVariable << std::endl; // 输出: 10
return 0;
}
模板类的静态成员变量初始化
对于模板类的静态成员变量,由于模板类的定义通常放在头文件中,并且可以被多个源文件包含和实例化,为了避免重定义错误,我们需要在头文件中进行初始化操作。
- 实例化的模板类实际上是生成了多个不同类型的类,并且每个实例化的类都有自己的静态成员变量。因此,我们需要在头文件中为每个实例化的类的静态成员变量进行初始化。
为实例化的类的静态成员变量进行初始化有两种常见的方法:
方法1:使用 inline 关键字进行声明和初始化
MyClass.h 头文件:
#ifndef MYCLASS_H
#define MYCLASS_H
template <typename T>
class MyClass {
public:
static inline T staticVariable;
};
main.cpp 源文件:
#include <iostream>
#include "MyClass.h"
int main() {
MyClass<int>::staticVariable = 10;
std::cout << MyClass<int>::staticVariable << std::endl; // 输出: 10
MyClass<double>::staticVariable = 3.14;
std::cout << MyClass<double>::staticVariable << std::endl; // 输出: 3.14
return 0;
}
方法2:使用静态成员初始化语法(C++17及更高版本)
MyClass.h 头文件:
在这里插入代码片#ifndef MYCLASS_H
#define MYCLASS_H
template <typename T>
class MyClass {
public:
static T staticVariable;
};
template <typename T>
T MyClass<T>::staticVariable = T();
#endif // MYCLASS_H
main.cpp 源文件:
#include <iostream>
#include "MyClass.h"
int main() {
MyClass<int>::staticVariable = 10;
std::cout << MyClass<int>::staticVariable << std::endl; // 输出: 10
MyClass<double>::staticVariable = 3.14;
std::cout << MyClass<double>::staticVariable << std::endl; // 输出: 3.14
return 0;
}
静态变量初始化