![](/img/trans.png)
[英]When is a `static_cast<Base*>(static_cast<void*>(derived))` from a pointer to a derived class valid?
[英]What happens when static_cast from derived class to base class?
在阅读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 = d
或B b = d
怎么样? 这两个语句是否涉及B
构造函数?
它们在标准中的含义是您可以将float转换为整数。 此时转换将发生。 您可以说此时直接初始化了结果int
。
如果参与转换的类具有相应的重载转换,则是,它将被调用。 我个人不建议积极使用此功能。 您的代码将难以阅读。
是的,对象类型的static_cast
(即,不是对引用或指针类型的static_cast
转换)将使用适当的构造函数来创建临时对象。
不。直接初始化意味着将从类D的对象复制B类对象中的每个字节,而不需要构造函数调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.