Dela via


/fpcvt (Flyttal till heltalskonverteringskompatibilitet)

Anger hur kompilatorn behandlar flyttalskonverteringar till heltalstyper.

Syntax

/fpcvt:IA
/fpcvt:BC

Arguments

/fpcvt:IA

Alternativet /fpcvt:IA instruerar kompilatorn att konvertera flyttalsvärden till heltal så att resultatet är kompatibelt med konverteringsinstruktionerna för Intel AVX-512. Det här beteendet är det vanliga beteendet i Visual Studio 2019 för x86-mål.

/fpcvt:BC

Alternativet /fpcvt:BC instruerar kompilatorn att konvertera flyttalsvärden till osignerade heltal så att resultaten är kompatibla med Visual Studio 2017 och tidigare kompilatorer. Det här beteendet är standard i Visual Studio 2022.

Anmärkningar

I Visual Studio 2019 version 16.8 och senare versioner kan kompilatoralternativet /fpcvt användas för att styra resultatet av konverteringar av flyttal till heltal. Alternativet /fpcvt:BC anger standardbeteendet för Visual Studio 2022, vilket är samma som beteendet för Visual Studio 2017 och tidigare versioner. Alternativet /fpcvt:IA anger beteende som är kompatibelt med beteendet för konverteringsinstruktioner för Intel Architecture (IA) AVX-512. Det här alternativet kan användas med antingen 32-bitars x86- eller 64-bitars x64-mål, och det gäller oavsett om /arch:AVX512 det har angetts eller inte.

För Visual Studio 2019 är standardbeteendet för x64-mål konsekvent med /fpcvt:BC om inte /arch:AVX512 anges. Vanligtvis är beteendet för x86-mål konsekvent med /fpcvt:IA, förutom under /arch:IA32, /arch:SSEeller ibland där resultatet av ett funktionsanrop konverteras direkt till ett osignerat heltal. Användning av /fpcvt åsidosättningar som standard, så alla konverteringar hanteras konsekvent på båda målen. Beteendet för konverteringar för ARM- och ARM64-mål är inte konsekvent med antingen /fpcvt:BC eller /fpcvt:IA.

Från och med Visual Studio 2022 är standardbeteendet för x64-mål konsekvent med /fpcvt:BC även när /arch:AVX512 det anges. Om du vill använda AVX512-konverteringsbeteende med /arch:AVX512anger du /fpcvt:IA.

Standard C++ anger att om ett trunkerat flyttalsvärde exakt kan representeras i en heltalstyp måste det ha det värdet när det konverteras till den typen. Annars tillåts alla beteenden alls. Båda /fpcvt alternativen överensstämmer med Standard C++. Den enda skillnaden är vilka värden som returneras för ogiltiga källvärden.

Alternativet /fpcvt:IA gör att en ogiltig konvertering returnerar ett enda sentinel-värde , vilket är målvärdet längst från noll. För konvertering till signerade typer är sentinel det minsta värdet för den typen. Osignerade typer använder det maximala värdet. Flyttalsåtgärder kan returnera ett NaN-värde (Not-a-Number) för att indikera en ogiltig åtgärd. Den indikatorn är inte ett alternativ för konvertering till heltalstyper, som inte har NaN-värden. Sentinel används som proxy för ett NaN-värde, men det kan också vara resultatet av en giltig konvertering.

Alternativet /fpcvt:BC gör också att konvertering till signerade typer returnerar det minsta möjliga värdet när källan är ogiltig. Konvertering till osignerade heltalstyper baseras dock på konvertering till long long. Om du vill konvertera ett värde till unsigned intkonverterar kompilatorn först det till att skriva long long. Kompilatorn trunkerar sedan resultatet till 32 bitar. Om du vill konvertera ett värde till unsigned long longhanteras giltiga källvärden som är för höga för en long long som ett specialfall. Alla andra värden konverteras först till long long och omarbetas sedan till unsigned long long.

Alternativen /fpcvt är nya i Visual Studio 2019 version 16.8. Om du anger fler än ett /fpcvt alternativ på kommandoraden prioriteras det senare alternativet och kompilatorn genererar en varning.

Inbyggda funktioner för konverteringar

Du kan ange beteendet för en specifik konvertering oberoende av alternativet /fpcvt , som gäller globalt. Kompilatorn tillhandahåller inbyggda sentinel-konverteringsfunktioner för konverteringar som är kompatibla med /fpcvt:IA. Mer information finns i Sentinel-konverteringsfunktioner. Kompilatorn tillhandahåller även funktioner för konvertering av mättnad som är kompatibla med konverteringar i ARM- eller ARM64-målarkitekturer. Mer information finns i Konverteringsfunktioner för mättnad.

Kompilatorn stöder också inbyggda konverteringsfunktioner som körs så snabbt som möjligt för giltiga konverteringar. Dessa funktioner kan generera valfritt värde eller utlösa ett undantag för en ogiltig konvertering. Resultatet beror på målplattformen, kompilatoralternativen och kontexten. De är användbara för att hantera värden som redan har intervallkontrollerats eller värden som genererats på ett sätt som inte kan orsaka en ogiltig konvertering. Mer information finns i Snabbkonverteringsfunktioner.

Ange det här kompilatoralternativet i Visual Studio-utvecklingsmiljön

  1. Öppna dialogrutan Egenskapssidor för projektet. Mer information finns i Ange C++-kompilator- och byggegenskaper i Visual Studio.

  2. Välj egenskapssidan Konfigurationsegenskaper>C/C++>Kommandorad .

  3. Ändra egenskapen Ytterligare alternativ för att lägga till /fpcvt:IA eller /fpcvt:BC. Spara ändringarna genom att välja OK .

Så här ställer du in det här kompilatoralternativet programmatiskt

Se även

Alternativ för MSVC-kompilator
Kommandoradssyntax för MSVC-kompilatorn
Snabbkonverteringsfunktioner
Konverteringsfunktioner för mättnad
Sentinel-konverteringsfunktioner