4

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

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


编辑
另一个问题是B & b = dor怎么样B b = d?这两个语句是否涉及构造函数B

4

3 回答 3

1

它们在标准中的意思是您可以将例如浮点数转换为整数。此时会发生转换。可以说此时结果int直接初始化了。

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

于 2013-06-23T09:22:26.893 回答
1

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

于 2013-06-23T11:56:16.223 回答
0

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

于 2013-06-23T09:21:51.823 回答