在本网站的另一个问题中已确定C中没有简短的后缀,并且可以执行以下操作:
short Number = (short)1;
但是施放它与不这样做有什么区别:
short Number = 1;
使用哪个以及编译器如何处理它们有什么关系?
答案 0 :(得分:3)
隐式演员和强制演员的效果没有区别,强迫演员主要是"纪录片" - 它说"我做了这故意" 。
显式强制转换使潜在的维护者明白,他们的类型是故意short
,不应更改为与初始化者匹配。它还可以用于使编译器或静态分析工具警告静音。但是,如果你提供的初始化程序太大而不能做空 - 它也会使任何警告都无声。
显式强制转换在宏定义中可能更有用,例如:
#define DEFAULT_CONDITION ((short)1)
short condition = DEFAULT_CONDITION ;
答案 1 :(得分:3)
在这两种情况下,代码的行为都是相同的。
但是,如果您将int
分配给short
(带有隐式转换),则某些代码检查程序/编译器可能会发出警告。
我知道的大多数工具都不会对文字值这样做。他们检查已知的文字是否真的适合较小的类型。