Gol*_*rol 6

几乎没有什么区别。正式地,第一个告诉编译器该值是一个整数。这可能根本不会生成任何额外的代码。函数调用是在内部执行其他类型转换的实际调用。智能编译器会对此进行优化,因此它们实际上是相同的。


Omn*_*ous 6

在我最初的答案中,显然我错了.它们大致相同.虽然复合类型名称喜欢long longvoid *不能直接使用函数语法(即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++强制语法样式 " 这个问题有一个很好的答案(接受的答案),详细解释了原因.

  • 这完全是假的.`class A {operator int()const; }; int test(A a){return int(a); 即使`int`没有构造函数,``也能很好地工作.使用单个参数转换的函数样式与等效的C样式转换具有完全相同的效果. (4认同)

Cra*_*lus 2

没有任何区别。这是一个偏好问题。这些都是老式的演员阵容。


归档时间:

查看次数:

9772 次

最近记录:

8 年,4 月 前