C++17之前,在类内定义的非const静态变量,需要在类的外面进行初始化:
#include <iostream>
using namespace std;
class A{
public:
static int m; //非const静态变量,需要在类外(通常是cpp文件中)进行初始化
const static int n = 8; //const静态变量,可以直接在类内进行初始化
};
int A::m = 5; //初始化类的非const静态变量
int main()
{
cout<<A::m<<endl; //输出:5
cout<<A::n<<endl; //输出:8
return 0;
}
C++17引入了内联变量的概念,可以直接在类内定义并初始化静态变量:
#include <iostream>
using namespace std;
class A{
public:
inline static int m = 6; //通过inline,定义并初始化类的静态变量
};
int main()
{
cout<<A::m<<endl; //输出:6
return 0;
}
内联变量也可以用于修饰全局变量。
C++17前,全局变量只能在cpp文件中定义,然后再头文件中声明;如果在头文件中定义全局变量,并且该头文件被include到多个cpp文件,那么编译会报错重复定义。