Share via


C28753

advertencia C28753: Confiar en un orden indefinido de evaluación de parámetros

C/C++ permite al compilador generar código para evaluar los parámetros reales en cualquier orden y los compiladores x86 y Arm tienden a seleccionar diferentes pedidos. El código que se basa en un orden específico puede comportarse de forma diferente en distintas plataformas.

Un error común es el uso de punteros inteligentes en los que la dirección del operador & tiene efectos secundarios, en llamadas como esta:

sp->Foo(&sp);

Las llamadas al operador de acceso a miembros :> y el operador& pueden producirse en cualquier orden. Por lo tanto, los efectos secundarios del operador & pueden ocurrir antes o después del operador :> se llama a . Esta advertencia busca estas llamadas con errores para evitar un comportamiento diferente entre las plataformas.

Ejemplo

El ejemplo de código siguiente genera esta advertencia.

sp->Foo(&sp)

En el ejemplo de código siguiente se evita esta advertencia.

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