本文主要是介绍C++备忘录085:reinterpret_cast/(Type*) is ok,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
不,它们不应该在代码里出现,除非你真的知道你在做什么,而不是自认为知道
#include <cstdio>struct X {virtual void foo() {std::puts("X");}~X() = default;
};struct Y {virtual void foo() {std::puts("Y");}~Y() = default;
};int main() {Y y;X *x = (X *)&y; // undefined behaviorx->foo();
}
这段代码在gcc下被编译成了
main:
因为类型转换那一行是未定义行为,gcc认为代码不可能执行到未定义行为,所以这一行及以后都被删除,Y y
也就成了废代码,也被删除,于是main
空了
(X *)
这种C风格的类型转换,最后会尝试reinterpret_cast
,以前提到过,reinterpret_cast
合法的场景非常有限,一般都会用错的
这篇关于C++备忘录085:reinterpret_cast/(Type*) is ok的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!