/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 開發環境中設定這個編譯器選項
開啟專案的 [屬性頁] 對話方塊。 如需詳細資料,請參閱在 Visual Studio 中設定 C ++ 編譯器和組建屬性。
選取 [組態屬性]>[C/C++]>[命令列] 屬性頁。
變更 [其他選項] 屬性以新增
/fpcvt:IA
或/fpcvt:BC
。 選取 [確定] 儲存您的變更。
若要以程式方式設定這個編譯器選項
- 請參閱 AdditionalOptions。