Ich habe eine Bedingung wie die folgenden, wo ich nur die zweite bool
der Auslöser für ein einziges Mal haben wollen, da diese Bedingung relativ oft aufgerufen wird, mag ich nicht die Idee, die Zuordnung von es jedes Mal falsch zu tun Die Bedingung ist wahr, also versuchte ich, die Reihenfolge von logischem UND und ODER und den Post-Inkrement-Operator zu nutzen. Aber es scheint zu funktionieren, tu nicht, was ich erwartet habe. Gibt es eine Möglichkeit, einen Post-State-Schalter für diese Leitung zu erstellen?Gibt es eine Möglichkeit, einen "post-switch" -ähnlichen Vorgang mit bool durchzuführen?
wo firstTitleNotSet
ist:
bool firstTitleNotSet;
if (titleChangedSinceLastGet() || (p_firstTitleNotSet && p_firstTitleNotSet++))
Die Idee ist, dass der erste Teil der primäre Auslöser ist und der zweite ist der Auslöser, die nur das erste Mal ausgelöst hat.
Während ich leicht
if (titleChangedSinceLastGet() || p_firstTitleNotSet)
{
firstTitleNotSet = false;
//...
}
tun könnte Ich mag das nicht, wie es falsch ist Neuzuweisung, wann immer der bedingte Block aufgerufen wird.
So gibt es einen Weg der "post change" der Wert eines bool von true
bis false
? Ich weiß, dass dies umgekehrt funktionieren würde, aber dies würde den Vorteil der Methode zunichte machen, bei der die meiste Zeit der wahre Auslöser ist und daher die folgende Überprüfung überspringt.
Hinweis: Die Gründe, warum ich solche Überlegungen angestellt habe, sind, anstatt nur den zweiten Fall zu nehmen, dass dieser Block häufig aufgerufen wird, um die verbrauchte Laufzeit zu optimieren.
Haben Sie versucht, etwas wie 'if (std :: exchange (p_firstTitleNotSet, false) == wahr)'? – KABoissonneault
@KABoissonneault: Nein, ich muss zugeben, dass ich es nicht einmal weiß. Aber ich bin mir noch nicht ganz sicher, ob das wirklich funktionieren würde, denn es sieht für mich wie eine Methode aus, die bei jedem Aufruf ausgeführt wird und den Wert umschalten lässt, was absolut nicht das ist, was ich benötige. – dhein
Dies scheint wie eine nutzlose Mikro-Optimierung, wie wahrscheinlich ist es, dass diese einzelne Zuweisung jedes Mal, wenn die Bedingung wahr ist, einen merklichen Unterschied in der Leistung machen wird? – SirGuy