2016-02-22 19 views
5

std::atomic_flagを使用する場合は、エラーが発生しやすいATOMIC_FLAG_INITを使用して常に明示的に初期化するように注意する必要があります。しかし、デフォルトのコンストラクタがあります...だから、は、既定のコンストラクタを持っていて、未定義の状態でフラ​​グを残すという客観的な理由はありますか?atomic_flagのデフォルトのコンストラクタが状態を未定義にする理由を教えてください。

+0

AFAIKでは、デフォルトのコンストラクタは変数を0で初期化することが保証されていますが、0が "clear"または "set"を参照するかどうかは指定されていません。もちろん、これは答えよりも多くの質問を発生させます... – 5gon12eder

+1

悲しいことに、これはcppreferenceによると、事例でもありません:* [ATOMIC_FLAG_INIT]はstd :: atomic_flagを特定の値に初期化する唯一の方法です。初期化は不特定です。しかし、私はそれがあなたの方法でそれを見ることが可能だと思います... – Synxis

+2

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1379.htm – dyp

答えて

0

This linkは(コメントでdypにより投稿さ)、この決定がなされたことが記載されているので、いくつかのアーキテクチャ上のセット状態に対応するであろうatomic_flagゼロ初期化、およびいくつかのそれがクリアな状態に対応することになります。このため、ATOMIC_FLAG_INITで明示的に初期化されていないatomic_flagは、最初は不確定な状態にあると定義されていました。