Type1
和Type2
有两种类型,由不同的头提供,对于某些整数类型都是typedef,但不知道哪些(并且可能在编译器,操作系统等方面有所不同)。 该程序是否保证正常工作(如果它编译)
Type1 a = ...; if (a == (Type2) a) { printf("a fits into Type2"); else { printf("a doesn't fit into Type2"); }
或者是否有我不考虑的角落案件?
如果您只担心条目的大小 ,请使用sizeof
:
if (sizeof(a) == sizeof(Type2)) { printf("a fits into Type2"); else { printf("a doesn't fit into Type2"); }
不,我认为不幸的是这还不够。 如果例如Type1
为short
且Type2
为int
,则左侧的值仍将提升为int
。 所以你要比较相同类型的相同值。
同时确保两种方式进行比较也无济于事。
您需要做的是确保您以两种方式进行比较, 并且您投射的值是一个值,如果转换为更窄的类型将被截断。 如果两者都是无符号类型,你可以使用类似的东西
((T1)-1 == (T1)(T2)(T1)-1) && ((T2)-1 == (T2)(T1)(T2)-1)
这也具有编译时表达式的优点。
如果签名中的一个或两个类型,则由于C中允许的不同符号表示,这更加困难。
编辑:当我写这篇文章时,我忽略了你只想在一个方向上。
(T1)-1 == (T1)(T2)(T1)-1
只是告诉你从T1
转到T2
时是否有信息丢失。
以上就是c/c++开发分享检查一个整数类型的值是否适合另一个整数类型相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/549894.html