在这种情况下,静态int的值是否会发生变化

时间:2016-03-12 00:32:26

标签: c++

我目前有一个头文件,包含多个头文件和源文件。头文件看起来像这样

File:External.h
#ifndef EXTERNAL_H
#define EXTERNAL_H

#include "memory"

static int pid=-1;

#endif // EXTERNAL_H

这是我当前场景的简化,只是为了检查我是否错了。现在假设我有两个类foobar。这是我注意到的行为。

#include "External.h"
void foo::someMethod()
{
   pid =13; //Change the value of pid;
   bar_ptr = new bar();
}

//bar constrcutor
#include "External.h"
bar::bar()
{
   int a = pid;  //The value of a is -1 wasnt it suppose to be 13
}

假设一个假设为13的值,特别是因为它是一个静态类型的开放变量(不是结构或类)。

1 个答案:

答案 0 :(得分:4)

这是因为每个文件都包含头文件,因此每个编译单元(大致是源文件)都会在其中包含此定义:

static int pid=-1;

因此他们每个人都有自己的副本。

你真的应该这样做:

  

External.h

// The declaration, so that people can access it
extern int pid;
  

External.c

// The actual implementation
int pid = -1;