今日、Visual C ++コードを書いているときに、驚いたことに遭遇しました。C ++はboolの++(インクリメント)をサポートしているようですが、-(デクリメント)はサポートしていません。これは単なるランダムな決定ですか、それとも背後に何らかの理由がありますか?
これはコンパイルします:
static HMODULE hMod = NULL;
static bool once = false;
if (!once++)
hMod = LoadLibrary("xxx");
これはしません:
static HMODULE hMod = NULL;
static bool once = true;
if (once--)
hMod = LoadLibrary("xxx");
++once
とonce++
GCCとの仕事ではなく、デクリメントします。
std::exchange(once,false)
(注:アトミックではない)に置き換えることができます。