分享

C++17标准中的内联成员变量

 武林幽忆 2025-04-24 发布于江苏

C++17引入了内联成员变量,主要是针对静态成员变量而言的,可以解决静态成员变量在类定义中进行初始化,而不必放到类外去初始化了。

原先的代码实现:

// header.h
class MyClass {
public:
    static int myStaticVar; 
};
// header.cpp
int MyClass::myStaticVar = 40;

// source1.cpp
#include "header.h"
void fun1(){
	MyClass::myStaticVar = 20;
}

// source2.cpp
#include "header.h"
void fun2(){
	int var = MyClass::myStaticVar;
}

存在的问题:myStaticVar必须只能在header.cpp中定义并初始化,放在header.h中会出现错误。source1.cpp和source2.cpp中都包含会引起重复定义,违反ODR原则(单一定义规则是 C++ 的一项基本规则,它规定在一个程序里,每个非内联函数、非内联变量、类类型、枚举类型等都只能有一个定义。要是违反了这个规则,链接时就会出现多重定义错误)。

而如果利用inline属性就可以这样写了

// header.h
class MyClass {
public:
    static inline int myStaticVar = 40; 
};

// source1.cpp
#include "header.h"
void fun1(){
	MyClass::myStaticVar = 20;
}

// source2.cpp
#include "header.h"
void fun2(){
	int var = MyClass::myStaticVar;
}

这样的代码就简洁明了。不过我个人认为C++17标准引入这项功能并太实用。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多