gpt4 book ai didi

c++ - 没有转换的 dynamic_cast 类型检查功能?

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:08 28 4
gpt4 key购买 nike

关于这个主题有很多问题,但似乎没有一个专门解决这个问题:给定一个不允许用虚函数解决所有问题的代码库(就像你通常做的那样)有一个函数:

/** Check if obj is a T, including base classes. */
template <class T>
inline bool is_a(const basic &obj)
{
return dynamic_cast<const T *>(&obj) != 0;
}

但很明显,即使没有必要,类型转换也会被制作出来。如何编写此函数以仅进行检查,即使用 dynamic_cast 功能而不进行实际转换?假设用虚函数替换对该函数的调用是不切实际的,或者为此目的实现一个穷人的 RTTI。

编辑:在标题中添加问号,强调对可能性的怀疑

最佳答案

请注意,实际转换只是向指针添加一个偏移量。确定偏移量所需的任何步骤也需要确定转换是否可能。一个好的优化器无论如何都会优化最后的添加,因为将一个常量添加到一个非空指针,除了空测试之外不使用它没有任何效果。

因此,任何不能改进设计的替代品都不会产生可衡量的效果;因此,如果由于某种原因无法实现更好的设计,正确的替代方法是保留原样的功能。

关于c++ - 没有转换的 dynamic_cast 类型检查功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30011509/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com