Situation: vérification de l'état en C++ ou C# avec de nombreux critères:En C++ et C# sont des vérifications de plusieurs conditions effectuées dans une séquence prédéterminée ou aléatoire?
if (condition1 && condition2 && condition3)
{
// Do something
}
J'ai toujours cru la séquence dans laquelle ces contrôles sont effectués ne sont pas garanties. Donc, ce n'est pas nécessairement la première condition1, puis la condition2 et seulement ensuite la condition3. Je l'ai appris à mon époque avec C++. Je pense qu'on me l'a dit ou que je l'ai lu quelque part.
Jusqu'à sais que je l'ai toujours secure code écrit pour tenir compte des pointeurs nuls possibles dans la situation suivante:
if ((object != null) && (object.SomeFunc() != value))
{
// A bad way of checking (or so I thought)
}
J'écrivais:
if (object != null)
{
if (object.SomeFunc() != value)
{
// A much better and safer way
}
}
Parce que je ne savais pas la La vérification non-null s'exécutera d'abord et seulement ensuite la méthode d'instance sera appelée pour effectuer la deuxième vérification.
Maintenant, nos plus grands esprits de la communauté me disent que la séquence dans laquelle ces contrôles sont effectués est garantie pour fonctionner dans l'ordre de gauche à droite.
Je suis très surpris. Est-ce vraiment le cas pour les langages C++ et C#?
Est-ce que quelqu'un d'autre a déjà entendu la version que j'ai entendue?
Les sous-expressions en C# sont évaluées de gauche à droite, toujours, période. Les sous-expressions en C/C++ sont évaluées dans l'ordre des points de séquence. Deux expressions dans le même point de séquence peuvent être évaluées dans n'importe quel ordre. Faites une recherche sur le web sur "point de séquence" si vous avez besoin d'une définition formelle. –