C++ 在这种情况下,静态int的值会改变吗
我目前有一个包含在多个头文件和源文件中的头文件。头文件如下所示C++ 在这种情况下,静态int的值会改变吗,c++,C++,我目前有一个包含在多个头文件和源文件中的头文件。头文件如下所示 File:External.h #ifndef EXTERNAL_H #define EXTERNAL_H #include "memory" static int pid=-1; #endif // EXTERNAL_H 这是我当前场景的简化,只是为了检查我是否可能错了。现在假设我有两个类foo和bar。以下是我注意到的行为 #include "External.h" void foo::someMethod() {
File:External.h
#ifndef EXTERNAL_H
#define EXTERNAL_H
#include "memory"
static int pid=-1;
#endif // EXTERNAL_H
这是我当前场景的简化,只是为了检查我是否可能错了。现在假设我有两个类foo
和bar
。以下是我注意到的行为
#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
}
a的值不是假定为13吗?特别是因为它是静态类型的开放变量(不是结构或类) 这是因为每个文件都包含头文件,因此每个编译单元(大致为源文件)的内部都有以下定义:
static int pid=-1;
因此,他们每个人都有自己的副本
真的,你应该这样做:
外部
外部
这是因为每个文件都包含头文件,因此每个编译单元(大致为源文件)的内部都有以下定义:
static int pid=-1;
因此,他们每个人都有自己的副本
真的,你应该这样做:
外部
外部
static
说明符给出了名称pid
内部链接,因此它指的是每个翻译单元中的不同实体。请发布真实代码。我们或许可以对答案做出相当可靠的猜测,但你的问题仍然应该重现这个问题。事实上,你走了一些弯路,我可以马上发现。嗯。。好的,谢谢你的澄清。这让我很困惑,这里有两个不同的pid变量。。或者更准确地说,每个包含该头文件的文件中都有一个。@BarryTheHatchet我理解。我试图复制我的情况,因为我无法发布整个项目。但是,如果有人有疑问,我将尝试澄清这一点。static
说明符给出名称pid
内部链接,因此它指的是每个翻译单元中的不同实体。请发布真实代码。我们或许可以对答案做出相当可靠的猜测,但你的问题仍然应该重现这个问题。事实上,你走了一些弯路,我可以马上发现。嗯。。好的,谢谢你的澄清。这让我很困惑,这里有两个不同的pid变量。。或者更准确地说,每个包含该头文件的文件中都有一个。@BarryTheHatchet我理解。我试图复制我的情况,因为我无法发布整个项目。但是,如果有人有问题,我会尝试澄清。它可以是External.cpp吗?是的,你可以称它为External.cpp它可以是External.cpp吗?是的,你可以称它为External.cpp
// The actual implementation
int pid = -1;