((int) a)
和之间有什么区别(int(a))
?
第二个表达式在纯“С”中有效吗?
(type_name)identifier
(或更具体地说(type_name)cast_expression
(6.5.4))是C样式的强制转换。(int(a))
除非a
是类型,否则在C中在语法上无效。然后,它可能是转换为采用类型a
并返回的函数的一部分int
,这在语法上是有效的,但在语义上是无效的,因此也没有用。int(a);
C中的声明等同于int a;
。
C ++确实支持int(a)
强制类型转换的语法(类型名称必须是一个单词;它不适用于例如unsigned long(a)
),原因是int
(类型名称)然后变得有点像带有参数化构造函数的类型(尽管在C ++中与C样式转换一起分组,是一种不建议使用的转换方式,更细粒度/可见的static_cast/reinterpret_cast/const_cast
转换是首选)。
然后,C ++语法似乎很有趣,因为它可以工作(C ++):
typedef int type_name;
type_name (a); //a declaration
a=0;
printf("%d\n", type_name(a)); //type_name(a) is a cast expr here
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句