当我将这段代码添加到已有的cpp文件中,其中包含我的一个类实现时。
#include <iostream>
struct TestStruct{
TestStruct(int i)
{
std::cerr << i << std::endl;
x = i;
}
int x;
};
TestStruct t(8);
在 main
执行之前,它会打印出 8。
但是当我创建了一个新的空文件 test.cpp 并把相同的代码放进去时,什么也没有被打印出来。我检查过这个 cpp 文件被编译和链接了。所有的 cpp 文件都被编译成静态库,然后将这个库与 main.o 链接到可执行文件中。我只使用了 g++ 5.3,并且使用了 -std=C++14
这个选项。
为什么第二种情况下全局变量初始化被省略了呢?