c++ 静态变量,经常会放到cpp文件中初始化。但并非一定要放到cpp中初始化.
之所以需要放到cpp中初始化,是因为static变量,必需切只能一次被初始化。
如果放到头文件.h中,两个cpp都include了.h文件,那就变成了"multiple definition"。但是如果只会被include一次,放到.h中是可以编译通过的。
问题的核心在于 " 必需切只能一次被初始化 "
例如: static_test.h, main.cpp,static 变量在.h中初始化, 如下:
static_test.h
#include <iostream>
class A
{
public:
void print()
{
std::cout << "my data:" << m_a << " static data: " << a << std::endl;
}
void print2();
public:
static int a;
private:
int m_a = 1;
};
int A::a = 4;
main.cpp:
#include "static_test.h"
int main()
{
A a;
a.print();
//a.print2();
return 0;
}
以上能正常编译.
但是,当增加新的cpp文件,static_test.cpp, include "static_test.h" 之后,编译就异常了。
#include "static_test.h"
// int A::a = 4;
void A::print2()
{
std::cout << "print again ----- my data:" << m_a << " static data: " << a << std::endl;
}
此时需要,将int A::a = 4 的实现,放到cpp文件中。
C++ 静态变量(static), 为何“一定”放在cpp文件中初始化.
原文:https://www.cnblogs.com/gsjtu/p/14772128.html