几乎是What's the difference between function(myVar) and (function)myVar?
的重演但我想知道:
这些变种的名称是什么,它们“不好”?
type(myVar)
是类似语法的构造函数,但对于基本类型,它与在C ++中被认为是错误的C风格转换相同吗?
(type)myVar
这个肯定似乎是一个C风格的演员,因此一定是不好的做法?
我见过一些人们用(int)a
替换int(a)
之类的内容,引用C风格的版本是错误/错误但链接的问题说它们都是相同的!
答案 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_cast
在auto x = nullptr;
足以容纳指针的架构上。