Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
aviso C28753: Confiando em ordem indefinida de avaliação de parâmetros
C/C++ permite que o compilador gere código para avaliar 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 onde o endereço do operador & tem efeitos colaterais, em chamadas como esta:
sp->Foo(&sp);
As chamadas para o operador de acesso membro -> e operador & podem acontecer em qualquer ordem. Assim, os efeitos colaterais do operador & podem acontecer antes ou depois do operador -> é chamado. Este aviso encontra essas chamadas com bugs para evitar comportamentos diferentes entre plataformas.
Exemplo
O código a seguir exemplo gera esse aviso.
sp->Foo(&sp)
O exemplo de código a seguir evita esse aviso.
SmartPtr spTemp;
sp->Foo(&spTemp);
sp = spTemp;