Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
«Operação»: conversão insegura de «type_of_expression» para «type_required»
Fazer uma chamada de função usando o ponteiro resultante pode fazer com que o programa falhe
Observações
Várias operações envolvendo ponteiros de função são consideradas inseguras:
Tipos de função com diferentes convenções de chamada.
Tipos de função com diferentes convenções de retorno.
Tipos de argumento ou retorno com tamanhos, categorias de tipo ou classificações diferentes.
** Diferentes comprimentos de lista de argumentos (em
__cdecl, apenas na conversão de uma lista mais longa para uma lista mais curta, mesmo que a lista mais curta seja varargs).Ponteiro para dados (diferente de
void*) associado contra um ponteiro para função.Qualquer outra diferença de tipo que gere um erro ou aviso em um
reinterpret_cast.
Chamar esta função através do ponteiro de resultado pode fazer com que o seu programa falhe.
Este aviso está desativado por padrão. Para obter mais informações, consulte Avisos do compilador que estão desativados por padrão.
Example
O exemplo a seguir gera C4191:
// C4191.cpp
// compile with: /W3 /clr
#pragma warning(default: 4191)
void __clrcall f1() { }
void __cdecl f2() { }
typedef void (__clrcall * fnptr1)();
typedef void (__cdecl * fnptr2)();
int main() {
fnptr1 fp1 = static_cast<fnptr1>(&f1);
fnptr2 fp2 = (fnptr2) &f2;
fnptr1 fp3 = (fnptr1) &f2; // C4191
fnptr2 fp4 = (fnptr2) &f1; // C4191
}