假设我想把A*成char* ,反之亦然,我们有两个select(我的意思是,我们中的很多人认为我们有两个select, 因为两者似乎都起作用了,所以混淆了): struct A { int age; char name[128]; }; A a; char *buffer = static_cast<char*>(static_cast<void*>(&a)); //choice 1 char *buffer = reinterpret_cast<char*>(&a); //choice 2 两者都很好。 //convert back A *pA = static_cast<A*>(static_cast<void*>(buffer)); //choice 1 A *pA = reinterpret_cast<A*>(buffer); //choice 2 即使这个工作正常! 那么为什么当两个链接的 static_cast可以完成它的工作时,我们在C ++中有reinterpret_cast ? 你们中的一些人可能会认为这个话题与前面的话题是重复的,比如在这篇文章的底部列出,但事实并非如此。 这些话题只是在理论上讨论, 但是他们都没有给出一个例子来说明为什么真正需要reintepret_cast ,而且两个 static_cast 肯定会失败。 我同意,一个static_cast将失败。 但是两个呢? 如果两个链接static_cast的语法看起来很麻烦,那么我们可以编写一个函数模板,使其更加程序员友好: template<class […]
static_cast和reinterpret_cast似乎都能很好地将void *转换为另一个指针types。 有一个很好的理由相互赞成吗?