可能的重复:
C++演员语法样式
C++:函数(myVar)和(函数)myVar有什么区别?
(类型)值和类型(值)之间有什么区别?
b = (int) a; // c-like cast notation b = int (a); // functional notation
几乎没有什么区别。正式地,第一个告诉编译器该值是一个整数。这可能根本不会生成任何额外的代码。函数调用是在内部执行其他类型转换的实际调用。智能编译器会对此进行优化,因此它们实际上是相同的。
在我最初的答案中,显然我错了.它们大致相同.虽然复合类型名称喜欢long long
或void *
不能直接使用函数语法(即long long(val)
不起作用),但使用typedef
可以解决这个问题.
两种演员表示都很糟糕,应该避免.例如:
const char c = 'a';
void *fred = (void *)(&c);
Run Code Online (Sandbox Code Playgroud)
工作,它不应该.
C风格的演员表示法有时会表现得像static_cast
,有时候const_cast
,有时候reinterpret_cast
,甚至是两者的组合,这取决于它使用的确切情况.这些语义相当复杂,并且在任何特定情况下确切地说出发生了什么并不总是很容易.
我主要使用C++ static_cast<type>(val)
样式转换,从不使用C风格的转换.根据我对这个问题的研究,我也将停止使用函数式转换." C++强制语法样式 " 这个问题有一个很好的答案(接受的答案),详细解释了原因.
归档时间: |
|
查看次数: |
9772 次 |
最近记录: |