共用方式為


/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 轉換函式