c++ - 如何测试类型转换时间?

标签 c++ casting runtime compile-time

在一项作业中,我被要求使用模板特化创建自己的 static_cast 和 dynamic_cast。 如何测试我的静态转换是否真的在编译时完成,动态转换在运行时完成?

template<typename Dst, typename Src>
static Dst my_static_cast(Src src);

template<typename Dst, typename Src>
static Dst my_dynamic_cast(Src src);

最佳答案

不是一个完整的答案,但考虑一下:

class D
{
public:
    virtual ~D(){}
};
class A : public D{};

class B{};

现在dynamic_cast<B*>(new A())编译正常(并返回 0)但是 static_cast<B*>(new A())导致编译错误。我几乎可以肯定您可以通过 SFINAE 对此进行适当的测试。

当然,此测试假设您只需要区分 100% 符合标准的 static_cast 和 100% 符合标准的 dynamic_cast。为了检测您的实现中的错误,需要进行额外的测试。

编辑: 您无法自动对其进行全面测试。强制转换需要运行时参数,因此无法在编译时对其进行测试。而且,在运行时,编译时计算的东西和运行时计算的东西之间的唯一区别是性能。我不建议通过“好吧,运行时转换不能那么快”来进行测试。它只是不可靠。

关于c++ - 如何测试类型转换时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31050238/

相关文章:

c++ - Cython C++ 包装器 operator() 重载错误

c++ - 如何查看 vector 中的内容?

C++ : filling map of maps via map instance allocation from a vector of maps

swift - swift 中两个 'identical' 类型之间隐式转换

c# - ToString() 和转换为字符串的区别

c - 运行机器代码时出现模糊的运行时错误

java - 如何在 ubuntu 10.04 环境中执行命令(带参数)

c++ - g++ 中的错误 "cannot appear in a constant-expression"但 gcc 中没有

java - 为什么这个赋值不需要显式转换?

algorithm - 不带路径压缩的森林实现的不相交集