2011-01-23 95 views

回答

2

没有区别。这是一个偏好问题。这些都是旧式的演员表

+5

-1这是错误的信息。 – Omnifarious 2011-01-23 19:09:34

+0

@Charles Bailey - 我犯了一个错误。现在修复它已经太迟了。对不起@ user384706。 – Omnifarious 2011-01-23 19:23:48

3

几乎没有任何区别。正式的,第一个告诉编译器该值是一个整数。这可能根本不会生成任何额外的代码。函数调用是内部执行其他类型转换的实际调用。一个聪明的编译器会优化这个,所以它们实际上是一样的。

5

显然我在最初的答案中错了。它们大致相当。虽然复合类型名称如long longvoid *不能直接使用函数语法(即long long(val)不起作用),但使用typedef可以解决此问题。

两个演员表符都很糟糕,应该避免。例如:

const char c = 'a'; 
void *fred = (void *)(&c); 

的作品,它不应该。

无论是C风格的转换符号有时会表现得像static_cast,有时像const_cast,有时像reinterpret_cast,甚至,这取决于它的使用的确切情况两者的结合。这些语义相当复杂,并且在任何特定情况下确切地说出发生了什么并不总是容易的。

我已经主要使用C++ static_cast<type>(val)风格转换,并且从不使用C风格转换。根据我对这个问题的研究,我也将停止对任何事情使用函数式转换。问题“C++ cast syntax styles”有一个很好的答案(接受的答案),详细说明了原因。

1

这取决于你在哪里使用它和如何。也就是说,如果你有值或指针(或指针指针)。

使用C++,您应该阅读* _cast <>并使用它们。