繁体   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