Not
Å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.
konvertering från "type_1" till "type_2" kräver en begränsad konvertering
Anmärkningar
En implicit begränsad konvertering hittades när enhetlig initiering användes.
C-språket tillåter implicita begränsade konverteringar i tilldelningar och initiering, och C++ följer efter, även om oväntad förträngning är en orsak till många kodfel. För att göra koden säkrare kräver C++-standarden ett diagnostikmeddelande när en begränsad konvertering sker i en initieringslista. I Visual C++är diagnostiken kompilatorfel C2397 när du använder den enhetliga initieringssyntax som stöds från och med Visual Studio 2015. Kompilatorn genererar kompilatorvarning (nivå 1) C4838 när du använder listan eller aggregerad initieringssyntax som stöds av Visual Studio 2013.
En begränsad konvertering kan vara okej när du vet att det möjliga intervallet med konverterade värden får plats i målet. I det här fallet vet du mer än vad kompilatorn gör. Om du avsiktligt gör en begränsad konvertering gör du dina avsikter explicita med hjälp av en statisk gjutning. Annars indikerar det här felmeddelandet nästan alltid att du har en bugg i koden. Du kan åtgärda det genom att se till att de objekt som du initierar har typer som är tillräckligt stora för att hantera indata.
Example
I följande exempel genereras C2397:
// C2397.cpp
// compile with: /c
struct S {
int m1;
double m2, m3;
};
void func(double d1) {
char c1 { 127 }; // OK
char c2 { 513 }; // C2397
S arr[2]{};
arr[0] = { d1, 2.0, 3.0 }; // C2397
arr[1] = { static_cast<int>(d1), 2.0, 3.0 }; // OK
}