C++: Ensemble bool valeur que s'il n'est pas

Je avoir le code de mon application C++ qui, généralement, fait ceci:

bool myFlag = false;
while (/*some finite condition unrelated to myFlag*/) {
    if (...) {
        //statements, unrelated to myFlag
    } else {
        //set myFlag to true, perhaps only if it was false before?
    }
}
if (myFlag) {
    //Do something...
}

La question que je me pose concerne le else déclaration de mon code. Fondamentalement, ma boucle peut définir la valeur de myFlag de faux à vrai, basée sur une certaine condition n'étant pas remplie. Jamais le drapeau unset de true à false. Je voudrais savoir ce que l'état fait plus de sens pour les performances et peut-être que si cette question est en fait une non-question en raison de l'optimisation du compilateur.

myFlag = true;

OU

if (!myFlag) myFlag = true;

Normalement j'choix de l'ex-car il nécessite écrire moins de code. Cependant, j'ai commencé à imaginer que peut-être il a impliqué inutile d'écriture de la mémoire et, par conséquent, celle-ci serait inutile de prévenir par écrit si myFlag était déjà vrai. Mais, serait à l'aide de ce dernier, prendre plus de temps car il y a une instruction conditionnelle et donc de compiler du code en utilisant plus d'instructions?

Ou peut-être que je suis plus de la pensée que c'est trop...


Mise à JOUR de 1

Juste pour clarifier un peu...le but de mon dernier cas est de ne pas écrire dans la mémoire si la variable était déjà vrai. Ainsi, seulement écrire dans la mémoire, si la variable est fausse.

Vous êtes plus que de penser que c'est trop.
Généralement, myFlag = true sera plus rapide cependant lorsque vous voulez savoir ce qui est le plus rapide que vous avez de profil sur votre propre système.
Vous serait tout simplement le remplacement d'un inutile d'écrire avec une inutile de lire et de direction, et devinez qui est plus lent.
La seule fois que vous devez à vous soucier de choses comme cela, c'est quand vous écrivez à des variables qui sont partagées avec d'autres threads. Si myFlag a été partagé (il n'est pas dans votre cas), puis écrit à indistinctement ferait le cache-ligne dirty qui serait snoop il de tous les autres cœurs qui peut avoir eu un clean copie, et vous devez tenir compte de false sharing - mais je suis pensée la réponse 🙂

OriginalL'auteur ecbrodie | 2013-02-22