是static_cast <t>(...)编译时还是运行时?</t>

时间:2013-08-26 23:29:09

标签: c++ c++11 casting runtime compile-time

static_cast<T>(...)是在编译时还是在运行时完成的事情?我用Google搜索了但我得到了不同的答案。

此外,dynamic_cast<T>(...)显然是运行时 - 但是reinterpret_cast<T>(...)呢?

2 个答案:

答案 0 :(得分:9)

取决于你投射的是什么。例如。 static_cast<std::string>("Hello")最终会调用std::string构造函数。

在我的脑海中,我无法想到reinterpret_cast需要生成实际机器指令的任何情况。它只是告诉编译器:采用这种位模式,并认为它是这种类型的值。

答案 1 :(得分:4)

编译时间。实际上,编译器甚至不会插入运行时代码来检查结果是否正确。当然,编译器确实检查转换是否静态。示例:从子类转换为超类。如果转换需要调用内置函数或转换函数,它们将在运行时执行,但是不会进行类型检查。