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

NoS*_*ill 7 c c++ type-conversion

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

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

Moh*_*lah 7

它们在 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)


PSk*_*cik 3

(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)

  • int(a) 不是一个以 a 作为构造函数参数的匿名 int 对象,与 string("abc") 是用 char* "abc" 参数构造的匿名字符串完全相同吗? (2认同)