私は次のような条件を持っています。この条件は比較的頻繁に呼び出されるため、1回だけトリガーになるようにします。毎回falseにするという考え方が気に入らないので、bool
条件が真であるので、論理ANDとORの順序とポストインクリメント演算子を利用しようとしました。しかし、それは私がそれが期待したことをしないで動作するように見えます。では、この行のポストステートスイッチを作成する方法はありますか?boolで "ポストスイッチ"のような操作をする方法はありますか?
firstTitleNotSet
である:
bool firstTitleNotSet;
if (titleChangedSinceLastGet() || (p_firstTitleNotSet && p_firstTitleNotSet++))
アイデアは最初の部分は、一次トリガーであり、第二は、初回のみをトリガしなければならないトリガーであることです。
私は簡単に今までに条件ブロックが呼び出されたときに、それは偽の再割り当てされるように私はこれが好きではない
if (titleChangedSinceLastGet() || p_firstTitleNotSet)
{
firstTitleNotSet = false;
//...
}
を行うことができますが。
したがって、ブールの値をtrue
からfalse
に変更する "ポスト変更"の方法がありますか?私はこれが他の方法で動作することを知っていますが、これはメソッドの利点を無効にします。ほとんどの時間が真のトリガーであるため、次のチェックをスキップします。
注:このような考慮事項を作成する理由は、このブロックが頻繁に呼び出されるため、消費されたランタイムを最適化するためです。
if (titleChangedSinceLastGet() ||
(p_firstTitleNotSet ? ((p_firstTitleNotSet=false), true):false))
代替構文は次のようになります:
if (titleChangedSinceLastGet() ||
(p_firstTitleNotSet && ((p_firstTitleNotSet=false), true)))
どちらか一つがやや醜い
'(std :: exchange(p_firstTitleNotSet、false)== true)'のようなものを試しましたか? – KABoissonneault
@ KABoissonneault:いいえ、私はそれを知らないと認めなければなりません。しかし、私はそれが実際に仕事をするかどうかはまだはっきりしていません。私には、価値を残しているすべての呼び出しに対して実行される方法、私が必要としていることとは全く異なる方法があります。 – dhein
これは無駄なマイクロ最適化のようですが、条件が真であるたびにこの単一の割り当てがパフォーマンスに顕著な差をつけることはありますか? – SirGuy