【发布时间】:2011-11-25 09:47:57
【问题描述】:
C/C++ 中的类型转换到底是什么?编译器如何检查是否需要(并且有效)显式类型转换?它是否比较一个值所需的空间?例如,如果我有:
int a;
double b = 15.0;
a = (int) b;
如果我没记错的话,双精度值需要比整数(4 字节)更多的空间(是 8 字节吗?!)。并且两者的内部表示完全不同(二/尾数的补码)。那么内部会发生什么呢?这里的例子很简单,但是在 C/C++ 中有很多类型转换。
编译器如何知道(或程序员)我是否可以转换,例如FOO 到 BAR?
【问题讨论】:
-
任何类型转换的完整解释都需要包括标准转换、用户定义转换、
reinterpret_cast、const_cast、向上转换、向下转换、交叉转换、RTTI 和值类型。 (我想我忘记了一个话题。) -
@Ben,我想我在谦虚的回答中提到了绝大多数,但没有(相当简洁的)答案可能被认为是完整的。
-
@MichaelGoldshteyn:当我写这篇文章时,您的
answer编辑还没有出现,只有两个非常简短的答案专注于 double->int 转换。跨度> -
@Ben,是的,我花了一段时间来增强我的答案,也许比要求的更详细。但是,我和你有同样的认识,并决定细节是必要的,甚至试图对一般问题提出一个稍微完整的答案。