我目前面临的一个恼人的问题,用C++未初始化。C++类的静态成员的*静态库*
事实上,我甚至不知道我为什么不面对它在过去20年:(
在我目前的情况下,我们大量使用C++的可执行文件(主要是在Linux的嵌入式系统)静态用我们专有的静态库链接。 同时,我们也使用静态库的技术和优化的原因。
在过去几年中,的确,我以前虽然创建共享库...
于是我开始写一些带有静态类成员的类如下所示:
class Inner
{
public:
Inner()
{
std::cout << "CTOR Inner" << std::endl;
}
};
class A
{
static Inner _inner;
...
};
// in the .cpp
Inner A::_inner;
///////////////////////
非常基本的用例,不是吗?
但在我的单元测试,用的lib联系,我看不到在控制台中std::cout
声明。 然而,如果将我的内部类和A到可执行的源代码...它工作正常。
我敢肯定,这是一个非常基本的问题,我意识到,我从未遇到过在过去几年里。 这是一个与编译器有关的问题吗? 请注意,我在Windows和Linux上测试了这两种情况(Debian,Gcc 4.9)。
任何想法是值得欢迎的。
Z.
全局变量只能保证在其含有翻译单元中的第一ODR使用的实体之前被初始化。如果你从不使用TU,你不能保证初始化全局变量。 –
好的。所以我必须找到一个解决方法来“正确”强制它们的初始化...好。 – Zyend
这是什么实际使用情况?我发现它非常符合期望,仅仅链接到一个静态库就没有副作用。如果我不使用某些东西,我不必为此付费,这是C和C++背后的设计原则。 – zett42