成员变量初始化

静态成员变量初始化方法

​静态成员变量的初始化需要在类外部进行,以下是两种常见的静态成员变量初始化方法:

在类的定义外部显式初始化:

#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;
}

静态变量初始化

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值