Partilhar via


C28753

aviso C28753: dependendo da ordem indefinida de avaliação de parâmetros

O C/C++ permite que o compilador gere código para avaliar os parâmetros reais em qualquer ordem e os compiladores x86 e Arm tendem a selecionar ordens diferentes. O código que depende de uma ordem específica pode se comportar de forma diferente em diferentes plataformas.

Um erro comum é com o uso de ponteiros inteligentes em que o endereço do operador & tem efeitos colaterais, em chamadas como esta:

sp->Foo(&sp);

As chamadas para o operador de acesso de membro –> e o operador& podem acontecer em qualquer ordem. Portanto, efeitos colaterais do operador & podem acontecer antes ou depois do operador –> é chamado. Esse aviso localiza essas chamadas de bug para evitar comportamentos diferentes entre plataformas.

Exemplo

O exemplo de código a seguir gera esse aviso.

sp->Foo(&sp)

O exemplo de código a seguir evita esse aviso.

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