((int)a)和(int(a))之间有什么区别?

时间:2020-01-19 09:44:30

标签: c++ c type-conversion

((int) a)(int(a))有什么区别?

第二个表达式在纯“С”中有效吗?

2 个答案:

答案 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