分享方式:


/fpcvt (浮點對整數轉換相容性)

指定編譯程式如何處理浮點數轉換成整數類型。

語法

/fpcvt:IA
/fpcvt:BC

引數

/fpcvt:IA

選項 /fpcvt:IA 會指示編譯程式將浮點值轉換成整數,讓結果與 Intel AVX-512 轉換指令相容。 此行為是Visual Studio 2019中 x86目標的一般行為。

/fpcvt:BC

選項 /fpcvt:BC 會指示編譯程式將浮點值轉換成不帶正負號的整數,讓結果與Visual Studio 2017和舊版編譯程式相容。 此行為是 Visual Studio 2022 中的預設值。

備註

在 Visual Studio 2019 16.8 版和更新版本中, /fpcvt 編譯程式選項可用來控制浮點到整數轉換的結果。 選項 /fpcvt:BC 會指定 Visual Studio 2022 的預設行為,這與 Visual Studio 2017 和舊版的行為相同。 選項 /fpcvt:IA 會指定與 Intel Architecture (IA) AVX-512 轉換指令行為相容的行為。 這個選項可以搭配 32 位 x86 或 64 位 x64 目標使用,並套用是否 /arch:AVX512 指定。

若為 Visual Studio 2019,除非指定,否則 /arch:AVX512 x64 目標的預設行為會與 /fpcvt:BC 一致。 x86 目標的行為通常與 /fpcvt:IA一致,除非在 /arch:IA32/arch:SSE、 下,或有時函數調用的結果會直接轉換成不帶正負號的整數。 /fpcvt使用 會覆寫預設值,因此所有轉換都會以一致的方式在任一目標上處理。 ARM 和 ARM64 目標的轉換行為與 或/fpcvt:IA不一致/fpcvt:BC

標準C++指定,如果截斷的浮點值在整數類型中完全可表示,當轉換成該類型時,它必須有該值。 否則,完全允許任何行為。 這兩 /fpcvt 個選項都符合標準C++。 唯一的差異在於傳回無效來源值的值。

選項 /fpcvt:IA 會導致任何無效的轉換傳回單 一 sentinel 值,這是最遠於零的目的地值。 若要轉換成帶正負號的類型,sentinel 是該類型的最小值。 未帶正負號的類型會使用最大值。 浮點運算可能會傳回 Not-a-Number (NaN) 值,表示無效的作業。 該指標不是轉換成整數型別的選項,沒有 NaN 值。 sentinel 會當做 NaN 值的 Proxy 使用,不過它也可以是有效轉換的結果。

選項 /fpcvt:BC 也會在來源無效時,將轉換至帶正負號的類型傳回可能的最小值。 不過,轉換成不帶正負號的整數類型是以 轉換成 long long為基礎。 若要將值 unsigned int轉換成 ,編譯程式會先將它轉換成 類型 long long。 編譯程式接著會將結果截斷為32位。 若要將值 unsigned long long轉換成 ,則有效來源值太高而無法 long long 處理為特殊案例。 所有其他值會先轉換成 long long ,然後再重新轉換成 unsigned long long

這些 /fpcvt 選項是 Visual Studio 2019 16.8 版的新功能。 如果您在命令行上指定多個 /fpcvt 選項,則較新的選項會優先使用,編譯程式會產生警告。

轉換的內建函式

您可以指定特定轉換的行為,與全域套用的選項無關 /fpcvt 。 編譯程式提供內建 sentinel 轉換函式,以便與 /fpcvt:IA相容的轉換。 如需詳細資訊,請參閱 Sentinel 轉換函式。 編譯程式也提供與 ARM 或 ARM64 目標架構轉換相容的飽和度轉換函式。 如需詳細資訊,請參閱 飽和度轉換函數

編譯程式也支持儘快執行以進行有效轉換的內建轉換函式。 這些函式可能會產生任何值,或擲回無效轉換的例外狀況。 結果取決於目標平臺、編譯程式選項和內容。 它們適用於處理已經檢查範圍的值,或以無法造成無效轉換的方式產生的值。 如需詳細資訊,請參閱 快速轉換函式

在 Visual Studio 開發環境中設定這個編譯器選項

  1. 開啟專案的 [屬性頁] 對話方塊。 如需詳細資料,請參閱在 Visual Studio 中設定 C ++ 編譯器和組建屬性

  2. 選取 [組態屬性]>[C/C++]>[命令列] 屬性頁。

  3. 變更 [其他選項] 屬性以新增 /fpcvt:IA/fpcvt:BC。 選取 [確定] 儲存您的變更。

若要以程式方式設定這個編譯器選項

另請參閱

MSVC 編譯器選項
MSVC 編譯器命令列語法
快速轉換函式
飽和度轉換函式
Sentinel 轉換函式