繁体   English   中英

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

[英]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 = dB b = d怎么样? 这两个语句是否涉及B构造函数?

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM