Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
conversie van 'type_1' naar 'type_2' vereist een smalle conversie
Opmerkingen
Er is een impliciete vermalingsconversie gevonden bij het gebruik van initialisatie van aggregaties of lijsten.
De C-taal maakt impliciete vermalingsconversies in toewijzingen en initialisatie mogelijk, en C++ volgt een passend voorbeeld, ook al is onverwacht beperken een oorzaak van veel codefouten. Om code veiliger te maken, vereist de C++-standaard een diagnostisch bericht wanneer er een beperkte conversie plaatsvindt in een initialisatielijst. In Visual C++is de diagnose compilerfout C2397 bij het gebruik van de uniforme initialisatiesyntaxis die vanaf Visual Studio 2015 wordt ondersteund. De compiler genereert waarschuwing C4838 wanneer u de syntaxis van de lijst of aggregaties initialisatie gebruikt die wordt ondersteund door Visual Studio 2013.
Een vermalingsconversie kan in orde zijn wanneer u weet dat het mogelijke bereik van geconverteerde waarden in het doel past. In dit geval weet u meer dan de compiler doet. Als u opzettelijk een vermalingsconversie maakt, moet u uw intenties expliciet maken met behulp van een statische cast. Anders geeft dit waarschuwingsbericht bijna altijd aan dat u een fout in uw code hebt. U kunt dit oplossen door ervoor te zorgen dat de objecten die u initialiseert, typen hebben die groot genoeg zijn om de invoer te verwerken.
Example
In het volgende voorbeeld wordt C4838 gegenereerd en ziet u een manier om dit op te lossen:
// C4838.cpp -- C++ narrowing conversion diagnostics
// Compile by using: cl /EHsc C4838.cpp
struct S1 {
int m1;
double m2, m3;
};
void function_C4838(double d1) {
double ad[] = { 1, d1 }; // OK
int ai[] = { 1, d1 }; // warning C4838
S1 s11 = { 1, 2, d1 }; // OK
S1 s12 { d1, 2, 3 }; // warning C4838
S1 s13 { static_cast<int>(d1), 2, 3 }; // possible fix for C4838
}