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

 

原文链接: https://www.cnblogs.com/gsjtu/p/14772128.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++ 静态变量(static), 为何“一定”放在cpp文件中初始化.

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/210572

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 上午12:23
下一篇 2023年2月13日 上午12:24

相关推荐