2010-11-16 65 views
2

簡單的事情:我想「轉換」例如將float分成double。現在有知道我有三種方法:在基本類型的情況下顯式類型轉換「運算符」之間是否存在差異?

float v = 4.2f; 
  1. double u = (double)v;
  2. double u = double(v);
  3. double u = static_cast<double>(v);
  4. double u(v);編輯:只是想過這個作爲第四個選項!

這些是相同還是有細微差別?你有什麼建議使用?

請注意,這個問題只與int,char,float等基本類型有關,不涉及指針,POD或類。

+0

查看http://stackoverflow.com/questions/28002/regular-cast-vs-static-cast-vs-dynamic-cast/1255015#1255015 – icecrime 2010-11-16 13:55:13

+0

@icecrime:你的鏈接處理指向多態類的轉換 - 不是基本類型。 – Danvil 2010-11-17 12:52:22

+0

'double'='double d = f;'會自動轉換成'double'。不用擔心。一個失去精度的轉換必須更謹慎地處理,我想這取決於具體的應用。在句法上,我會推薦'static_cast',因爲它稍後允許您搜索'_cast'來查找所有的演員。 – 2010-12-02 14:22:19

回答

4

double u = (double)v;double u = static_cast<double>(v);是等同的,因爲對於這兩種情況使用標準轉換。但是double u = double(v);會創建一個臨時雙重對象(無論如何都可以優化),然後用它來初始化u。但是由於無論如何都創造了節奏,使用所有三種演員,那麼是的,它是一樣的。

從這三個static_cast應該是首選。這是一個更多的字符鍵入,但從長遠來看,這是更好的,因爲首先你明確指定鑄造類型,也因爲鑄造通常是可疑的,你做它非常生動的方式

+4

在這種情況下,它們相當**,但'static_cast '應該是首選! – icecrime 2010-11-16 13:54:24

+0

@icecrime:好的,我給了它一些想法,是的,他們是equivlent :) – 2010-11-16 13:58:33

+0

@Armen,你應該編輯添加static_cast <>比C風格的演員更受歡迎。 – 2010-11-16 13:59:11

0

double u = v;怎麼樣,讓編譯器將其默認促銷從float改爲double

如果您想明確顯示轉換,static_cast是首選的C++方式。這是更多的輸入,但它會告訴編譯器您要發生的轉換。

+0

在浮點的情況下不使用顯式類型轉換 - > double或其他可能丟失信息的轉換會生成編譯器警告! – Danvil 2010-11-29 10:59:11

+1

@Danvil怎麼可能'浮動' - >'雙'丟失信息? 'double'保證至少與'float'一樣大 – 2010-11-29 14:11:36

相關問題