((int) a)
和(int(a))
有什么区别?
第二个表达式在纯“С”中有效吗?
答案 0 :(得分:7)
在C ++中,它们之间没有区别。但是,C仅支持第一个强制转换操作。
请参见tutorial中的示例:
double x = 10.3;
int y;
y = (int) x; // c-like cast notation
y = int (x); // functional notation
答案 1 :(得分:3)
(type_name)identifier
(或更具体地说,(type_name)cast_expression
(6.5.4))是C样式的强制转换。除非(int(a))
是类型,否则a
在C中在语法上无效。然后,它可能是转换为采用类型a
并返回int
的函数的一部分,这在语法上是有效的,但在语义上是无效的,因此也没有用。 C中的int(a);
是等同于int a;
的声明。
C ++确实支持int(a)
的强制转换语法(类型名称必须是单个单词;不适用于unsigned long(a)
),其理由是int
(类型名称),然后变得有点像带有参数化构造函数的类型(尽管即使在C ++中,它也与C样式强制类型转换一起作为一种不推荐使用的强制转换方式,更细粒度/可见的{{1} }首选)。
然后,C ++语法似乎很有趣,因为它可以工作(C ++):
static_cast/reinterpret_cast/const_cast