Welcome

首页 / 软件开发 / C++ / 跨C++文件和库对静态对象进行初始化

跨C++文件和库对静态对象进行初始化2013-11-04 ibm Zhipeng.Liu假期通常是个回顾过去的好时候。这里就是我正在思考的上个月使我产生"ah-hah"瞬间的一个 问题。

问题:

当你编译下面的C++程序的时候,你可能认为模块(module)中的对象会先编译并先初始 化。

这种假设可能得不到预期的结果。

X.h :

#include <string>

using namespace std;    // 译者注: 加上这行

class CObjet {

 public:

    static const string STRINGX;

};

X.cpp:

#include <X.h>

using namespace std;    // 译者注: 这行可以不要

const string CObjet::STRINGX = "001";

Y.cpp:

#include <iostream>

#include <X.h>

const string STRINGY= CObjet::STRINGX;

int main () {

cout << "CObjet::STRINGX [" <<CObjet::STRINGX << "]" << endl;

cout << "STRINGY [" <<  STRINGY << "]" << endl;

return 0;

}

如果用下面的命令来编译:

xlC -c -I./ X.cpp -o X.o

xlC -c -I./ Y.cpp -o Y.o

xlC -o binary X.o Y.o