問題タブ [static-order-fiasco]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
204 参照

c++ - 静的変数へのポインターの格納

後で C に移植したい C++ 用の単体テスト フレームワークを作成しましたが、単体テストが実行されないという問題に遭遇しました。単体テストは .cpp ファイルで作成され、1 つの .cpp ファイルだけですべてのテストを実行する必要があります。

少し単純化するために、これは通常のテストの作成方法です。

main.cpp

unit_test.hpp

test.cpp

問題は、test.cpp で定義されたテストが実行されないのはなぜですか (main.cpp ファイルでテストを作成すると、完全に正常に実行されます)。私の推測では、問題は Base ポインターを格納する方法にあると思いますが、わかりません。コンパイラは g++ 6.4.0 です

0 投票する
1 に答える
87 参照

c++ - 別の翻訳単位の関数を呼び出すと、静的初期化順序の大失敗が発生する可能性があります

a.cpp

b.cpp

そして、ここにのコンストラクターがありますBar

これは静的初期化命令の大失敗につながりますか? はいの場合、どうすれば解決できますか。以下のようなことを考えました。

しかし、私は C++11 をサポートしていないため、静的ローカル初期化はスレッド セーフではありません。したがって、これは機能しません。

barobjまた、静的でない場合はどうなりますか。じゃあ、この大失敗は気にしなくていいよね?別の翻訳単位での別の非静的オブジェクトの初期化に依存している非静的オブジェクトの初期化の場合、問題はありません。右?

0 投票する
1 に答える
70 参照

c++ - 明示的にインスタンス化されたテンプレートの静的メンバーと別の静的変数の初期化の順序

これは私の問題の簡略化された形式です(実際のライブラリに基づく):

私の質問は、関数が呼び出されるX<int>::v_前に初期化されるこの場合 (単一の翻訳単位) — 定義とインスタンス化の順序によって — が保証されているかどうかです。init()


私の知る限り、静的変数は定義順に単一の翻訳単位で初期化されますが、テンプレートと明示的なインスタンス化はそれについて何かを変えることができますか? その明示的なインスタンス化が削除されたらどうなるでしょうか? それとも、ソースコードの最後に置く?