我有一個程序,其中我定義的全局靜態變量一旦離開我的「初始化函數」(不是構造函數)就不會保持初始化。下面是程序:全局靜態變量不是「保持定義」功能之外
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()
之外變得不確定?