faq-liteのSIOFについて読んだことがありますが、それでも問題の原因が分かりません。私は静的ライブラリ(.a)を持っており、静的constデータメンバオブジェクト型を使用するためにそのライブラリを使用しています。その後、その静的constデータメンバオブジェクトタイプIはグローバル変数(オブジェクト)を使用して割り当てます。しかし、グローバル変数をメイン変数またはローカル関数に使用すると、グローバル変数は空のようです。明らかに私の問題はSIOFであることが分かりますが、私の静的constデータメンバオブジェクトが初期化されなかった理由は本当にわかりません。私たちは、静的ライブラリを作成したときには、静的ライブラリた「静的初期化オーダー・フィアスコ」の詳細な説明のリクエスト
は、私は私が間違っているなら、私を修正し、静的定数データメンバオブジェクトがコンパイルされ、その静的ライブラリにリンクされていたと思います。..
//libsource.h
class foo
{
public:
....
public:
static const barbar foofaa;
};
//libsource.cpp
const barbar foo::foofaa = barbar();
//main.cpp
#include <libsource.h>
barbar foos= foo::foofaa;
int main()
{
//can't use foos because its empty
}
してくださいアドバイスを。その静的constデータメンバオブジェクトが静的ライブラリ内にあっても初期化されなかったのはなぜですか?
多くのありがとうございます。
こんにちは。その初期化部分について私には本当にぼんやりとしています。静的データメンバーを初期化する必要があるのはなぜですか?静的ライブラリを作成するためにコンパイルおよびリンクしたときに既に初期化されていますか?ご意見をお聞かせください。ありがとう – domlao
@sasayins:静的変数は、プログラムを実行するまで初期化されません。彼らはあなたの静的なライブラリで使用されるのを待つ前に "初期化"されていません。したがって、あなたのプログラムが( 'main()'が呼び出される前に)起動すると、すべてのライブラリの静的変数をすべて初期化します。 – JaredC
今、私にはとても分かりました。ありがとう。 – domlao