簡體   English   中英

C ++是否會自動將const int強制轉換為浮點數?

[英]does C++ automatically cast const ints to floats?

我知道將int轉換為float(反之亦然)是相當昂貴的。 但是,編譯器是否會在編譯時針對代碼中的常量自動執行此操作? 例如之間有什么區別

float y = 123;
float x = 1 / y;

float y = 123.f;
float x = 1.f / y;

我看到一些執行后者的代碼,但是我不確定是否用於優化或安全性問題(即,即使y恰好是一個整數,也要確保除法是浮點數)。

我正在使用gcc(因為答案可能是特定於編譯器的。)

同樣,通常會想到指向編譯器可以優化和不能優化的列表的任何指針。 謝謝!

是的,編譯器將自動進行轉換。 您的兩個代碼塊是相同的。

這不是優化。 關閉優化不會讓編譯器包含可執行代碼的INT-漂浮的轉換,除非它是一個質量非常差的執行。

也不是為了安全。 編譯器絕不會做任何“以防萬一”操作數恰好是不同類型的事情。 編譯器知道代碼中所有內容的類型。 如果更改變量的類型,則使用該變量的所有內容都會被重新編譯; 編譯器不會嘗試保持其他所有內容不變,而只是更新更改的部分。

是的,它確實是這樣做的,所以這兩個片段是等效的。 唯一重要的是分配給變量的類型。

對於大多數編譯器, float y = 123float y = 123.f的情況應該相同,但是如果y是整數, float x = 1 / yfloat x = 1.f / y實際會產生不同的結果。

它確實確實取決於編譯器-有些可能實際上存儲了一個常量int,並在每次將其分配給float變量時對其進行轉換。

在某些情況下,編譯器將float強制轉換為int,例如

float f;
if (f > 1) ...

在這種情況下,我發生過這種情況(Visual Studio 2008),編譯器生成的代碼等效於

if (int (f) > 1) ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM