简单地说:如果 i是tostatic_cast
的类型,那么返回 X* 是否总是安全的?X*
void*
reinterpret_cast
我无法产生任何失败的情况,例如:
#include <iostream>
struct a
{
int* m_array;
};
int main()
{
bool fail = false;
for(int i = 0; ++i < 5000;)
{
a* pA = new a;
pA->m_array = new int [i+1]; // A new size of data everytime
pA->m_array[i] = 10;
void* pvA = static_cast<void*>(pA);
pA = reinterpret_cast<a*>(pvA);
if(pA->m_array[i] != 10)
{
fail = true;
break;
}
delete []pA->m_array;
delete pA;
}
if(fail)
std::cout<<"FAILED!!";
else
std::cout<<"Never failed :/";
}
在使用 vs 2012 的调试和发布模式下给出结果“从不失败:/”。然而,这很可能是未定义的行为。正确的?