全局静态变量不在函数外部“保持定义”
我有一个程序,其中我定义的全局静态变量一旦离开我的“初始化函数”(不是构造函数)就不会保持初始化。 这是该计划:
type.h
namespace type
{
static int * specialInt;
}
type.cpp
#include "type.h"
(这是故意留空)
Branch.h
#include "type.h"
namespace type
{
bool initInt();
}
Branch.cpp
#include "Branch.h"
#include <iostream>
namespace type
{
bool initInt()
{
specialInt = new int;
*specialInt = 95;
std::cout << "Address from initInt(): " << specialInt << std::endl;
return true;
}
}
Leaf.h
#include "Branch.h"
#include <iostream>
namespace type
{
void PrintInt();
}
Leaf.cpp
#include "Leaf.h"
namespace type
{
void PrintInt()
{
std::cout << "Address: " << specialInt << std::endl;
std::cout << "Value: " << *specialInt << std::endl;
}
}
main.cpp中
#include "Leaf.h"
int main()
{
type::initInt();
type::PrintInt();
return 0;
}
输出是
来自initInt()的地址:007F5910
地址:00000000
在它崩溃之前。 我读过关键字static
让变量具有外部链接,为什么这会失败? 为什么变量在initInt()
之外变得不确定?
namespace type
{
static int * specialInt;
}
这是一个静态整数指针的定义。 命名空间范围内的static
请求内部链接:包含type.h
每个转换单元都获取其自己的独立版本的specialInt
。 那么当然,对其中一个specialInt
的更改不会影响其他的。
你想要做的是在type.h
声明变量:
namespace type
{
extern int * specialInt;
}
...并在其中一个翻译单元中提供单一定义:
#include "type.h"
int *type::specialInt;
然后这个定义将被每个人通过type.h
找到并使用。
我读到关键字static
让变量具有外部链接,
不,当静态与名称空间范围内的对象一起使用时,它指定内部链接。 这意味着,在specialInt
分配的Branch.cpp
和在specialInt
打印的Leaf.cpp
不是同一个对象。
3)...当在命名空间范围的声明中使用时,它指定内部链接。
链接地址: http://www.djcxy.com/p/35331.html上一篇: Global static variable not "staying defined" outside of function