我了解通常认为 C 风格的强制类型转换是有害的。因此,对于一个类 Widget
,
class Widget{
public:
explicit Widget(Gizmo gizmo);
};
我可以像这样调用一个函数:
functionThatTakesAWidget((Widget) gizmo);
可以使用C风格转换,也可以使用函数风格转换:
functionThatTakesAWidget(Widget(gizmo));
但是这完全等效。所以没有更好或更糟。如果我真的想避免 C 风格的转换,我可以写成:
functionThatTakesAWidget(static_cast<Widget>(gizmo));
假设有一个名为Doohickey
的类:
class Doohickey {
public:
Doohickey(Gizmo left_gizmo, Gizmo right_gizmo);
};
我不得不写下这句话:
functionThatTakesADoohickey(Doohickey(left_gizmo, right_gizmo));
我假设这不被认为是一个“转换”?但这与函数样式的转换有什么区别?为什么这个可以,而函数样式的转换不行?