static_cast<>我正在学习C++模板,我发现像、、、这样的类型转换看起来像模板,虽然书上dynamic_cast<>说它们都是“运算符”。我想知道:const_cast<>reinterpret_cast<>
1)这些强制转换函数是否是由模板编写的?
2)如果是真的,我在哪里可以找到源代码?
3)如果不是的话,为什么都是以模板的形式设计的?是否可以通过模板来实现它们?
这些转换函数是否是由模板编写的?
不,正如你的书所说,他们是操作员。
为什么都是以模板的形式来设计呢?
与模板一样,它们的行为部分是使用编译时类型参数指定的。使用相同的语法在稍微不同的上下文中执行相同的操作是有意义的。
是否可以通过模板来实现它们?
仅使用核心 C++ 语言,不。
static_cast,const_cast和可以reinterpret_cast通过 C 样式强制转换(允许所有这些转换)和 C++11 类型特征的组合来实现,以将转换限制为每种情况下允许的转换。然而,其中一些特性依赖于无法使用核心语言实现的魔法。
dynamic_cast需要访问对象的RTTI信息;typeid除了通过或本身之外,没有其他办法可以做到这一点dynamic_cast。