C28753
avviso C28753: Basarsi su un ordine non definito di valutazione dei parametri
C/C++ consente al compilatore di generare codice per valutare i parametri effettivi in qualsiasi ordine e i compilatori x86 e Arm tendono a selezionare ordini diversi. Il codice che si basa su un ordine specifico può comportarsi in modo diverso su piattaforme diverse.
Un errore comune è con l'uso di puntatori intelligenti in cui l'indirizzo dell'operatore & ha effetti collaterali, nelle chiamate come segue:
sp->Foo(&sp);
Le chiamate all'operatore di accesso ai membri e> all'operatore&potrebbero verificarsi in entrambi gli ordini. Pertanto gli effetti collaterali dell'operatore & potrebbero verificarsi prima o dopo l'operatore -> viene chiamato. Questo avviso rileva queste chiamate buggy per impedire un comportamento diverso tra le piattaforme.
Esempio
L'esempio di codice seguente genera questo avviso.
sp->Foo(&sp)
Nell'esempio di codice seguente viene evitato questo avviso.
SmartPtr spTemp;
sp->Foo(&spTemp);
sp = spTemp;