当static_cast从派生类到基类时会发生什么?

时间:2013-06-23 07:17:26

标签: c++ constructor static-cast

在阅读C ++标准时,我读到static_cast是一种直接初始化(C ++标准8.5 / 15)。 我认为这意味着在static_cast期间,会调用相应的重载构造函数。 例如,存在从B派生的类型B和类型D,以及对象D d。然后,表达式static_cast<B>(d)static_cast表达式。

作为标准,这个static_cast表达式是直接初始化。这是否意味着它将调用B类型的构造函数并返回类型为B的新构造对象?


修改
另一个问题是B & b = dB b = d的问题?这两个语句是否涉及B的构造函数?

3 个答案:

答案 0 :(得分:1)

它们在标准中的含义是您可以将float转换为整数。此时转换将发生。您可以说生成的int此时已直接初始化。

如果参与转换的类具有相应的重载转换,则是,它将被调用。我个人不建议积极使用此功能。您的代码将难以阅读。

答案 1 :(得分:1)

是的,对象类型的static_cast(即,不是对引用或指针类型的强制转换)将使用适当的构造函数来创建临时对象。

答案 2 :(得分:0)

没有。直接初始化意味着将从类D的对象复制B类对象中的每个字节,而不需要构造函数调用。