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标准引入这项功能并太实用。 |
|