何时将内存分配给命名空间中定义的变量

时间:2013-09-19 19:37:09

标签: c++ static

例如,假设aClassA中的公共静态成员。

namespace SPACE{

   char* ClassA::a=NULL;

   ClassA::ClassA()
   {
     ClassA::a="initialized here";
   }
}

所以有两个问题:

  1. 何时调用a=NULL?在main()之前或之后?
  2. 因为a是静态成员,为什么可以使用NULL“initialized here"定义两次?

2 个答案:

答案 0 :(得分:5)

  1. main()

  2. 之前
  3. 只有定义一次 - 在命名空间范围内。第二个是作业。它在构造函数运行时被调用,并且它修改了一个已经存在的(已定义和初始化的)变量。

答案 1 :(得分:2)

  

何时调用a=NULL?在main()之前或之后?

有可能,它永远不会被调用:因为这是一个const初始化的值,它可能由系统上的可执行文件的加载器初始化而不运行任何代码。是否已使用某些代码初始化,例如a = my_init_func();,将在main()之前完成。

  

因为a是一个静态成员,为什么可以用NULL和“在这里初始化”两次定义它?

第二个是作业,而不是声明。