C++ 靜態變量(static), 為何“一定”放在cpp文件中初始化.


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文件中。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM