以下代码是否存在未定义行为(UB)?
int i = 5;
void *p = &i;
int* &r = reinterpret_cast<int* &>(p);
int* p2 = r;
请注意我不对指针进行解引用。
int i = 5;
void *p = &i;
int* &r = reinterpret_cast<int* &>(p);
int* p2 = r;
请注意我不对指针进行解引用。
是的,它是未定义行为。
reinterpret_cast<int* &>(p);
等同于
*reinterpret_cast<int**>(&p);
reinterpret_cast
允许将 void**
转换为 int**
,但是隐式解引用是未定义的行为,因为数据的类型 (void*
) 和被访问的类型 (int*
) 不相似。
int i = 5;
void *p = &i; //convert int* => void*
int* &r = reinterpret_cast<int* &>(p); //convert void* which was int* to int*&
int* p2 = r; //**copy** address stays same
void *
成员。在派生类中,我需要将此成员强制转换为特定指针的引用。我无法通过值转换指针,因为this。我确切地需要引用。 - anton_rh