我目前面臨的一個惱人的問題,用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