Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
"operation": osäker konvertering från "type_of_expression" till "type_required"
Om du gör ett funktionsanrop med hjälp av den resulterande pekaren kan programmet misslyckas
Anmärkningar
Flera åtgärder som rör funktionspekare anses vara osäkra:
Funktionstyper med olika anropskonventioner.
Funktionstyper med olika returkonventioner.
Argument- eller returtyper med olika storlekar, typkategorier eller klassificeringar.
Skillnader i argumentlistans längd (på
__cdecl, endast vid typomvandling från en längre lista till en kortare lista, även om den kortare är varargs).Pekare till data (förutom
void*) som är aliaserad mot en funktionspekare.Alla andra typer av skillnader som skulle ge ett fel eller en varning på en
reinterpret_cast.
Om du anropar den här funktionen via resultatpekaren kan programmet krascha.
Den här varningen är inaktiverad som standard. Mer information finns i Kompilatorvarningar som är inaktiverade som standard.
Example
I följande exempel genereras 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
}