Sdílet prostřednictvím


/fpcvt (Kompatibilita převodu s plovoucí deseti čárkou na celé číslo)

Určuje, jak kompilátor zachází s převody s plovoucí desetinou čárkou na celočíselné typy.

Syntaxe

/fpcvt:IA
/fpcvt:BC

Argumenty

/fpcvt:IA

Tato /fpcvt:IA možnost kompilátoru říká, že má převést hodnoty s plovoucí desetinou čárkou na celá čísla, aby výsledky byly kompatibilní s pokyny pro převod Intel AVX-512. Toto chování je obvyklé chování v sadě Visual Studio 2019 pro cíle x86.

/fpcvt:BC

Tato /fpcvt:BC možnost kompilátoru říká, že má převést hodnoty s plovoucí desetinou čárkou na celá čísla bez znaménka, aby výsledky byly kompatibilní se sadou Visual Studio 2017 a dřívějšími kompilátory. Toto chování je výchozí v sadě Visual Studio 2022.

Poznámky

V sadě Visual Studio 2019 verze 16.8 a novějších verzích /fpcvt lze k řízení výsledků převodů s plovoucí desetinou čárkou na celé číslo použít možnost kompilátoru. Tato /fpcvt:BC možnost určuje výchozí chování sady Visual Studio 2022, což je stejné jako chování sady Visual Studio 2017 a starších verzí. Tato /fpcvt:IA možnost určuje chování kompatibilní s chováním konverzní instrukce Intel Architecture (IA) AVX-512. Tuto možnost lze použít s 32bitovými cíli x86 nebo 64bitovými cíli x64 a použije se bez ohledu na to, jestli /arch:AVX512 je zadán nebo ne.

Pro Visual Studio 2019 je výchozí chování cílů x64 konzistentní s /fpcvt:BC výjimkou /arch:AVX512 zadaného. Chování cílů x86 je obvykle konzistentní s /fpcvt:IAvýjimkou pod /arch:IA32, /arch:SSEnebo někdy, kde je výsledek volání funkce přímo převeden na celé číslo bez znaménka. Použití přepsání výchozího /fpcvt nastavení, takže všechny převody jsou zpracovávány konzistentně u obou cílů. Chování převodů cílů ARM a ARM64 není konzistentní s ani /fpcvt:BC /fpcvt:IAs .

Standardní jazyk C++ určuje, že pokud je zkrácená hodnota s plovoucí desetinnou čárkou přesně reprezentovaná v celočíselném typu, musí mít tuto hodnotu při převodu na tento typ. V opačném případě je povolené jakékoli chování. Obě /fpcvt možnosti odpovídají standardu C++. Jediný rozdíl spočívá v tom, jaké hodnoty se vrátí pro neplatné zdrojové hodnoty.

Tato /fpcvt:IA možnost způsobí, že jakýkoli neplatný převod vrátí jednu hodnotu sentinelu , což je cílová hodnota nejdále od nuly. Pro převod na podepsané typy je pro daný typ sentinel minimální hodnota. Typy bez znaménka používají maximální hodnotu. Operace s plovoucí desetinnou čárkou můžou vrátit hodnotu Not-a-Number (NaN), která označuje neplatnou operaci. Tento indikátor není možností převodu na celočíselné typy, které nemají hodnoty NaN. Sentinel se používá jako proxy pro hodnotu NaN, i když může být také výsledkem platného převodu.

Tato /fpcvt:BC možnost také umožňuje převod na podepsané typy vrátit minimální možnou hodnotu, pokud je zdroj neplatný. Převod na celočíselné typy bez znaménka je však založen na převodu na long long. Chcete-li převést hodnotu na unsigned int, kompilátor nejprve převede na typ long long. Kompilátor pak zkrátí výsledek na 32 bitů. Chcete-li převést hodnotu na unsigned long longplatné zdrojové hodnoty, které jsou příliš vysoké pro určitý long long případ, jsou zpracovány jako zvláštní případ. Všechny ostatní hodnoty se nejprve převedou na long long a pak přepojí na unsigned long long.

Možnosti /fpcvt jsou nové v sadě Visual Studio 2019 verze 16.8. Pokud na příkazovém řádku zadáte více než jednu /fpcvt možnost, bude mít pozdější možnost přednost a kompilátor vygeneruje upozornění.

Vnitřní funkce pro převody

Chování konkrétního převodu můžete určit nezávisle na /fpcvt možnosti, která se použije globálně. Kompilátor poskytuje vnitřní funkce převodu sentinelu pro převody kompatibilní s /fpcvt:IA. Další informace najdete v tématu Funkce převodu služby Sentinel. Kompilátor také poskytuje funkce převodu sytosti kompatibilní s převody v cílových architekturách ARM nebo ARM64. Další informace naleznete v tématu Funkce převodu sytosti.

Kompilátor také podporuje vnitřní funkce převodu, které se pro platné převody provádějí co nejrychleji. Tyto funkce mohou generovat jakoukoli hodnotu nebo vyvolat výjimku pro neplatný převod. Výsledky závisí na cílové platformě, možnostech kompilátoru a kontextu. Jsou užitečné pro zpracování hodnot, které už byly zkontrolovány rozsahem, nebo hodnoty vygenerované způsobem, který nemůže způsobit neplatný převod. Další informace naleznete v tématu Rychlé převodní funkce.

Nastavení tohoto parametru kompilátoru ve vývojovém prostředí Visual Studio

  1. Otevřete dialogové okno Stránky vlastností projektu. Podrobnosti najdete v tématu Nastavení kompilátoru C++ a vlastností sestavení v sadě Visual Studio.

  2. Vyberte stránku vlastností příkazového řádku C/C++>Vlastnosti>konfigurace.

  3. Upravte vlastnost Další možnosti pro přidání /fpcvt:IA nebo /fpcvt:BC. Kliknutím na OK uložte provedené změny.

Programové nastavení tohoto parametru kompilátoru

Viz také

Možnosti kompilátoru MSVC
Syntaxe příkazového řádku kompilátoru MSVC
Funkce rychlého převodu
Funkce převodu sytosti
Funkce převodu sentinelu