如何在const之后构造全局对象?

时间:2011-04-19 01:52:28

标签: c++ variables constructor global

我刚遇到一个奇怪的问题。在WinMain.cpp中,在我包含用户创建的头文件之后,但是在BEMORE WinMain之后,我声明了我的类Brain的全局实例,如下所示:

(windows includes)
#include "BrainLib.h"
#include "Brain.h"

Brain brain;

(wndproc declaration)

WinMain() {
  (some code using Brain)
}

BrainLib.h中,我声明了一些常规程序使用的常量,例如const unsigned short SERVER_PORT = 12345;const std::string SERVER_IP_STRING = "192.168.1.104";请注意Brain.h还包括BrainLib.h

现在它变得有趣了。 Brain包含一个Winsock客户端包装器类,它只能连接到一个服务器。因此,Winsock客户端有一个构造函数需要port / ip而没有默认构造函数。因此,它必须在Brain构造函数初始化列表中初始化,如下所示:

Brain::Brain() : winsockClient( SERVER_PORT, SERVER_IP_STRING )
{
}

但是,调用Brain构造函数时,SERVER_IP_STRING仍然未初始化!我在WinMain中检查了它,并且它在那时被构造,但似乎首先调用了Brain构造函数,即使它看起来是第二个。这是怎么回事?

另外,只是为了让这个陌生人:我复制了源代码并在不同的机器上编译,它按预期工作。在每个版本上运行相同版本的MSVS 2008,但我想可能会使用某种不同的构建设置。

1 个答案:

答案 0 :(得分:3)

初始化全局对象的顺序未定义。