在阅读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
的构造函数?
答案 0 :(得分:1)
它们在标准中的含义是您可以将float转换为整数。此时转换将发生。您可以说生成的int
此时已直接初始化。
如果参与转换的类具有相应的重载转换,则是,它将被调用。我个人不建议积极使用此功能。您的代码将难以阅读。
答案 1 :(得分:1)
是的,对象类型的static_cast
(即,不是对引用或指针类型的强制转换)将使用适当的构造函数来创建临时对象。
答案 2 :(得分:0)
没有。直接初始化意味着将从类D的对象复制B类对象中的每个字节,而不需要构造函数调用。