((int) a)
和(int(a))
有什么区别?
在纯“C”(不是“C++”)中,第二个表达式是否有效?
((int) a)
和(int(a))
有什么区别?
在纯“C”(不是“C++”)中,第二个表达式是否有效?
C++ 中它们之间没有区别。然而,C 仅支持第一种强制类型转换操作。
参见来自教程的示例:
double x = 10.3;
int y;
y = (int) x; // c-like cast notation
y = int (x); // functional notation
(type_name)identifier
(更确切地说是(type_name)cast_expression
(6.5.4))是C风格的转换。在C中,(int(a))
在语法上无效,除非a
是一种类型。然后它可以成为转换的一部分,转换为一个接受类型为a
且返回int
的函数,这将是一个在语法上有效但在语义上无效的转换,也是无用的。在C中,int(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
-std=c11 -pedantic-errors
(或者您编译器的等效选项)进行编译。这将给出正确的答案99%的时间。 - StoryTeller - Unslander Monica