type(myVar)和(type)myVar的名称是什么?他们都是不好的做法吗?

时间:2014-02-17 23:39:29

标签: c++ c++11 casting

几乎是What's the difference between function(myVar) and (function)myVar?

的重演

但我想知道:

这些变种的名称是什么,它们“不好”?

type(myVar)是类似语法的构造函数,但对于基本类型,它与在C ++中被认为是错误的C风格转换相同吗?

(type)myVar这个肯定似乎是一个C风格的演员,因此一定是不好的做法?

我见过一些人们用(int)a替换int(a)之类的内容,引用C风格的版本是错误/错误但链接的问题说它们都是相同的!

1 个答案:

答案 0 :(得分:3)

  

这些变种的名称是什么

  • type(expr)被称为函数式演员。
  • (type)(expr)被称为C风格演员。
  

并且他们'不好'?

Yes.首先,两者在语义上完全等效。它们“不好”,因为它们不安全 - 它们可能等同于static_cast,但同样是reinterpret_cast,并且不知道type expr的类型不可能说 1 。在某些情况下,它们也忽略了访问说明符(C样式转换允许在私有继承层次结构中进行转换)。此外,它们并不像显式C ++样式转换那样冗长,这是一件坏事,因为转换通常意味着在C ++中脱颖而出。


1 考虑int(x):根据x'类型,这可能是static_cast(例如auto x = 4.2f;)或{{1 (例如reinterpret_castauto x = nullptr;足以容纳指针的架构上。