static_cast 是模板吗?

map*_*ple 3 c++ templates

static_cast<>我正在学习C++模板,我发现像、、、这样的类型转换看起来像模板,虽然书上dynamic_cast<>说它们都是“运算符”。我想知道:const_cast<>reinterpret_cast<>

1)这些强制转换函数是否是由模板编写的?

2)如果是真的,我在哪里可以找到源代码?

3)如果不是的话,为什么都是以模板的形式设计的?是否可以通过模板来实现它们?

Mik*_*our 5

这些转换函数是否是由模板编写的?

不,正如你的书所说,他们是操作员。

为什么都是以模板的形式来设计呢?

与模板一样,它们的行为部分是使用编译时类型参数指定的。使用相同的语法在稍微不同的上下文中执行相同的操作是有意义的。

是否可以通过模板来实现它们?

仅使用核心 C++ 语言,不。

static_cast,const_cast和可以reinterpret_cast通过 C 样式强制转换(允许所有这些转换)和 C++11 类型特征的组合来实现,以将转换限制为每种情况下允许的转换。然而,其中一些特性依赖于无法使用核心语言实现的魔法。

dynamic_cast需要访问对象的RTTI信息;typeid除了通过或本身之外,没有其他办法可以做到这一点dynamic_cast