web-dev-qa-db-fra.com

Opérateurs ternaires C ++, une différence?

Je lisais sur la différence de ce qui suit:

1)

std::string test = level > 10 ? "Master" : "Beginner";

2)

std::string test;
if (level > 10)
    test = "Master";
else
    test = "Beginner";

Et dans le deuxième cas, on m'a dit que dans la deuxième option, une valeur temporaire est créée que je ne comprends pas.

J'ai appris que lorsque nous déclarons une variable sans initialisation, cela prend des déchets, donc le compilateur contient juste un emplacement mémoire et ne "travaille" pas pour changer sa valeur.

9
smith_brown

Il n'y a aucune raison de ne pas utiliser le premier formulaire, mais le compilateur aurait de graves problèmes de performances s'il ne produisait pas le même code pour l'un ou l'autre. Cela dit, le premier formulaire est clair et facile à comprendre, et peut donner moins de travail à l'optimiseur, vous pouvez donc l'utiliser. Il énonce clairement l'intention de initialiser la variable à l'une des deux valeurs données, et le code qui exprime le plus clairement l'intention produit souvent le meilleur code généré (en plus d'être le plus facile à comprendre).

0
Scott M