簡體   English   中英

顯式/隱式類型轉換c ++

[英]explicit/implicit type conversion c++

我有一行代碼

double i = 1 + (long)1.5* 5.0f

我的問題是轉換順序和結果是什么? 一直在尋找這樣的例子,但無濟於事。 有什么好的指南可以幫助我理解它嗎?

我的問題是轉換順序和結果是什么?

強制轉換應用於1.5 ,給出long1

這被轉換為float乘以5.0f ,給出一個值為5.0ffloat

1轉換為float用於添加與該值,得到float值為6.0f

最后,這被提升為double (保留值6.0 )以分配給i

這假設一種非瘋狂的浮點格式,可以准確地表示小整數; 否則,可能存在舍入錯誤。

如果要轉換乘法的結果,則使用括號來控制運算符優先級:

double i = 1 + (long)(1.5* 5.0f);  // = 8.0

或使用C ++風格的強制轉換,強制使用括號:

double i = 1 + static_cast<long>(1.5* 5.0f)

有什么好的指南可以幫助我理解它嗎?

這是一個: http//en.cppreference.com/w/cpp/language/operator_precedence 請注意,類型轉換具有比乘法更高的優先級,而乘法又高於加法(3對5對6)。

這個表中可以看出,強制轉換操作符的優先級高於乘法,但請遵循建議使用括號。

此優先級表應告訴您需要知道的所有內容。

  1. 施法: 1.5施放到long
  2. 乘法: 1.5 * 5.0f ,將此產品轉換為float
  3. 增加: 1 + ( ((long) 1.5) * 5.0f)
  4. 作業: i = 1 + ((long) 1.5 * 5.0f)

如果您不確定轉換運算符的優先級是什么,那么重寫表達式(在您的頭腦中)

(long)1.5 * 5.0

5.0 * (long)1.5

這里顯而易見的是優先級和第一個版本相同

暫無
暫無

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

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