static_cast<T>(...)
是在编译时还是在运行时完成的事情?我用Google搜索了但我得到了不同的答案。
此外,dynamic_cast<T>(...)
显然是运行时 - 但是reinterpret_cast<T>(...)
呢?
答案 0 :(得分:9)
取决于你投射的是什么。例如。 static_cast<std::string>("Hello")
最终会调用std::string
构造函数。
在我的脑海中,我无法想到reinterpret_cast
需要生成实际机器指令的任何情况。它只是告诉编译器:采用这种位模式,并认为它是这种类型的值。
答案 1 :(得分:4)
编译时间。实际上,编译器甚至不会插入运行时代码来检查结果是否正确。当然,编译器确实检查转换是否静态。示例:从子类转换为超类。如果转换需要调用内置函数或转换函数,它们将在运行时执行,但是不会进行类型检查。