/fpcvt
(Gleitkomma-Zu-Ganzzahl-Konvertierungskompatibilität)
Gibt an, wie der Compiler Gleitkommakonvertierungen in ganzzahlige Typen behandelt.
Syntax
/fpcvt:IA
/fpcvt:BC
Argumente
/fpcvt:IA
Die /fpcvt:IA
Option weist den Compiler an, Gleitkommawerte in ganze Zahlen zu konvertieren, sodass die Ergebnisse mit den Intel AVX-512-Konvertierungsanweisungen kompatibel sind. Dieses Verhalten ist das übliche Verhalten in Visual Studio 2019 für x86-Ziele.
/fpcvt:BC
Die /fpcvt:BC
Option weist den Compiler an, Gleitkommawerte in nicht signierte ganze Zahlen zu konvertieren, sodass die Ergebnisse mit den Visual Studio 2017- und früheren Compilern kompatibel sind. Dieses Verhalten ist die Standardeinstellung in Visual Studio 2022.
Hinweise
In Visual Studio 2019, Version 16.8 und höher, kann die /fpcvt
Compileroption verwendet werden, um die Ergebnisse von Gleitkommakonvertierungen in ganze Zahlen zu steuern. Die /fpcvt:BC
Option gibt das Standardverhalten von Visual Studio 2022 an, das dem Verhalten von Visual Studio 2017 und früheren Versionen entspricht. Die /fpcvt:IA
Option gibt das Verhalten an, das mit der Intel Architecture (IA) AVX-512-Konvertierungsanweisungsverhalten kompatibel ist. Diese Option kann mit 32-Bit-x86- oder 64-Bit-x64-Zielen verwendet werden und gilt, ob /arch:AVX512
angegeben oder nicht.
Für Visual Studio 2019 ist das Standardverhalten für x64-Ziele konsistent, /fpcvt:BC
es sei denn /arch:AVX512
, es wird angegeben. In der Regel ist das Verhalten für x86-Ziele konsistent mit /fpcvt:IA
, außer unter /arch:IA32
, /arch:SSE
, oder manchmal, wo das Ergebnis eines Funktionsaufrufs direkt in eine nicht signierte ganze Zahl konvertiert wird. Verwendung von /fpcvt
Außerkraftsetzungen des Standardwerts, sodass alle Konvertierungen für beide Zielwerte konsistent behandelt werden. Das Verhalten von Konvertierungen für ARM- und ARM64-Ziele ist mit beiden /fpcvt:BC
oder /fpcvt:IA
nicht konsistent.
Standard C++ gibt an, dass ein abgeschnittener Gleitkommawert in einem ganzzahligen Typ exakt dargestellt werden kann, diesen Wert aufweisen muss, wenn er in diesen Typ konvertiert wird. Andernfalls ist überhaupt ein Verhalten zulässig. Beide /fpcvt
Optionen entsprechen standard C++. Der einzige Unterschied besteht darin, welche Werte für ungültige Quellwerte zurückgegeben werden.
Die /fpcvt:IA
Option bewirkt, dass eine ungültige Konvertierung einen einzelnen Sentinelwert zurückgibt, bei dem es sich um den Zielwert am weitesten von Null handelt. Bei der Konvertierung in signierte Typen ist der Sentinel der Mindestwert für diesen Typ. Nicht signierte Typen verwenden den Maximalwert. Gleitkommavorgänge geben möglicherweise einen NaN-Wert (Not-a-Number) zurück, um einen ungültigen Vorgang anzugeben. Dieser Indikator ist keine Option für die Konvertierung in ganzzahlige Typen, die keine NaN-Werte enthalten. Der Sentinel wird als Proxy für einen NaN-Wert verwendet, kann aber auch das Ergebnis einer gültigen Konvertierung sein.
Die /fpcvt:BC
Option macht auch die Konvertierung in signierte Typen, die den minimalen möglichen Wert zurückgeben, wenn die Quelle ungültig ist. Die Konvertierung in nicht signierte ganzzahlige Typen basiert jedoch auf der Konvertierung in long long
. Um einen Wert in unsigned int
zu konvertieren, konvertiert der Compiler ihn zuerst in typ long long
. Der Compiler schneidet das Ergebnis dann auf 32 Bit ab. Zum Konvertieren eines Werts in unsigned long long
, gültige Quellwerte, die für einen long long
Wert zu hoch sind, werden als Sonderfall behandelt. Alle anderen Werte werden zuerst in long long
konvertiert und dann in unsigned long long
.
Die /fpcvt
Optionen sind neu in Visual Studio 2019, Version 16.8. Wenn Sie mehrere /fpcvt
Optionen in der Befehlszeile angeben, hat die spätere Option Vorrang, und der Compiler generiert eine Warnung.
Systeminterne Funktionen für Konvertierungen
Sie können das Verhalten einer bestimmten Konvertierung unabhängig von der /fpcvt
Option angeben, die global angewendet wird. Der Compiler stellt systeminterne Sentinel-Konvertierungsfunktionen für Konvertierungen bereit, die mit /fpcvt:IA
. Weitere Informationen finden Sie unter Sentinel-Konvertierungsfunktionen. Der Compiler stellt außerdem Sättigungskonvertierungsfunktionen bereit, die mit Konvertierungen auf ARM- oder ARM64-Zielarchitekturen kompatibel sind. Weitere Informationen finden Sie unter Sättigungskonvertierungsfunktionen.
Der Compiler unterstützt auch systeminterne Konvertierungsfunktionen, die so schnell wie möglich für gültige Konvertierungen ausgeführt werden. Diese Funktionen können einen beliebigen Wert generieren oder eine Ausnahme für eine ungültige Konvertierung auslösen. Die Ergebnisse hängen von der Zielplattform, den Compileroptionen und dem Kontext ab. Sie sind nützlich für die Behandlung von Werten, die bereits bereichsgecheckt wurden, oder werte, die auf eine Weise generiert wurden, die keine ungültige Konvertierung verursachen kann. Weitere Informationen finden Sie unter "Schnelle Konvertierungsfunktionen".
So legen Sie diese Compileroption in der Visual Studio-Entwicklungsumgebung fest
Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Weitere Informationen erhalten Sie unter Set C++ compiler and build properties in Visual Studio (Festlegen der Compiler- und Buildeigenschaften (C++) in Visual Studio).
Klicken Sie auf der Eigenschaftenseite auf Konfigurationseigenschaften>C/C++>Befehlszeile.
Ändern Sie die Eigenschaft "Zusätzliche Optionen ", die Hinzugefügt oder hinzugefügt
/fpcvt:IA
werden/fpcvt:BC
soll. Klicken Sie auf OK, um die Änderungen zu speichern.
So legen Sie diese Compileroption programmgesteuert fest
- Siehe AdditionalOptions.
Siehe auch
MSVC-Compileroptionen
Syntax für die MSVC-Compilerbefehlszeile
Schnelle Konvertierungsfunktionen
Sättigungskonvertierungsfunktionen
Sentinel-Konvertierungsfunktionen