NoS*_*ill 7 c c++ type-conversion
((int) a)和 和有(int(a))什么区别?
第二个表达式在纯“?”中有效吗?
它们在 C++ 中没有区别。但是,C 仅支持第一个强制转换操作。
请参阅教程中的此示例:
double x = 10.3;
int y;
y = (int) x; // c-like cast notation
y = int (x); // functional notation
Run Code Online (Sandbox Code Playgroud)
(type_name)identifier(或更具体地说(type_name)cast_expression(6.5.4))是 C 风格的强制转换。除非是类型,(int(a))否则在 C 中在语法上无效。然后它可能是对采用类型并返回 的a函数进行强制转换的一部分,这将是语法上有效但语义上无效的强制转换,因此也无用。在 C 中将是相当于.aintint(a);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
Run Code Online (Sandbox Code Playgroud)