Tru*_*are 0 c++ floating-point double implicit-conversion
我目前正在学习C++思想C++入门.在关于类型转换的第4.11章中,我注意到本章很少讨论从积分到浮点类型的隐式转换,但实际上主要集中在积分类型内的转换.因此,我不确定从整数类型到浮点类型的转换规则.
我的问题来自章节的例子:
int ival = 3.541 + 3
Run Code Online (Sandbox Code Playgroud)
该章提到double
在添加3.541之前将3转换为类型.
问题源于这样一个事实:对于大多数整数类型,int
除非它们无法适应,否则它们在隐式转换期间大多被提升int
.由于int
与float
两个相同大小的4个字节,而3.0和3.541可以完美配合到float
,为什么高阶double
在这种情况下,用于隐式转换,而不是float
?这是否意味着对于任何整数类型到浮点类型的隐式转换,double
无论精度或大小如何,整数类型都将转换为a ?
谢谢你!
3.541
是双重的.这就是另一个论点需要转换成的东西.
后缀用于表示文字的精度,3.541f
(或F)表示浮点数,3.541L
(或l)表示长整数.默认值(无后缀)为double.来源http://en.cppreference.com/w/cpp/language/floating_literal.
3.541不适合任何长度,因为它是二进制的重复分数.实际值将是浮点值尽可能接近3.541(如果是双倍的话,则为3.540999999999999925393012745189480483531951904296875).