Partager via


C28753

avertissement C28753 : S’appuyer sur un ordre non défini d’évaluation des paramètres

C/C++ permet au compilateur de générer du code pour évaluer les paramètres réels dans n’importe quel ordre, et les compilateurs x86 et Arm ont tendance à sélectionner des ordres différents. Le code qui s’appuie sur un ordre spécifique peut se comporter différemment sur différentes plateformes.

Une erreur courante est l’utilisation de pointeurs intelligents où l’adresse de l’opérateur & a des effets secondaires, dans les appels comme suit :

sp->Foo(&sp);

Les appels à l’opérateur > d’accès aux membres et les&d’opérateur peuvent se produire dans l’un ou l’autre ordre. Ainsi, les effets secondaires de l’opérateur& peuvent se produire avant ou après l’opérateur -> est appelé. Cet avertissement détecte ces appels de bogues pour empêcher un comportement différent d’une plateforme à l’autre.

Exemple

L’exemple de code suivant génère cet avertissement.

sp->Foo(&sp)

L’exemple de code suivant évite cet avertissement.

SmartPtr spTemp;
sp->Foo(&spTemp);
sp = spTemp;