iam*_*ind 9 c++ casting overloading
使用C++样式的类型转换(全部4个)看起来就像一些函数模板.例如
template<typename TO, typename FROM>
TO dynamic_cast (FROM p);
Run Code Online (Sandbox Code Playgroud)
将用作,
dynamic_cast<Derived*>(p); // p is Base*
Run Code Online (Sandbox Code Playgroud)
为什么不允许按自定义使用的语言标准重载它们?(就像我们可以重载像new/delete或其他关键字一样operators)
为什么不允许按语言标准重载它们以供自定义使用?
我想这是因为标准委员会在介绍这些时,认为所有这四种类型转换的语义都定义良好,并且适用于它们应该是的所有类型。大多数情况下,这是真的。
我知道的唯一反例是无法dynamic_cast在智能指针实例之间进行操作:
shared_ptr<Derived> pd = dynamic_cast<shared_ptr<Derived> >(pb);
Run Code Online (Sandbox Code Playgroud)
我想这样做的能力会有一些优点。
我不知道在标准委员会中完成所有工作的志愿者是否已经讨论过这个问题(我懒得去谷歌),但如果已经讨论过(我想是这样),那么它已经被讨论过。之所以被拒绝,要么是因为有人认为弊大于利,要么是因为没有人有时间提出一个像样的建议并引导其通过。1
1别笑。实际上,有很多事情大多数人都认为拥有是件好事,但这些事情之所以未能实现,是因为没有人愿意费心去写一份像样的提案,花时间讨论和迭代改进它,直到它能够实现。可以进行投票。