/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:IAnicht 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 intzu 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

  1. Ö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).

  2. Klicken Sie auf der Eigenschaftenseite auf Konfigurationseigenschaften>C/C++>Befehlszeile.

  3. Ändern Sie die Eigenschaft "Zusätzliche Optionen ", die Hinzugefügt oder hinzugefügt /fpcvt:IA werden /fpcvt:BCsoll. Klicken Sie auf OK, um die Änderungen zu speichern.

So legen Sie diese Compileroption programmgesteuert fest

Siehe auch

MSVC-Compileroptionen
MSVC-Compiler-Befehlszeilensyntax
Schnelle Konvertierungsfunktionen
Sättigungskonvertierungsfunktionen
Sentinel-Konvertierungsfunktionen