C++类型转换:将指针从void指针转换为类指针

Nav*_*een 16 c++ pointers void

如何将指向void对象的指针强制转换为类对象?

Mik*_*our 26

有了static_cast.请注意,如果指针确实指向指定类型的对象,则必须执行此操作; 也就是说,指针的值void取自指向这样一个对象的指针.

thing * p = whatever(); // pointer to object
void * pv = p;          // pointer to void
thing * p2 = static_cast<thing *>(pv); // pointer to the same object
Run Code Online (Sandbox Code Playgroud)

如果您发现自己需要这样做,可能需要重新考虑您的设计.您放弃了类型安全性,可以轻松编写无效代码:

something_else * q = static_cast<something_else *>(pv);
q->do_something();  // BOOM! undefined behaviour.
Run Code Online (Sandbox Code Playgroud)

  • 不,那没有用; 这是不对的.使用`reinterpret_cast`. (3认同)
  • 我不明白这件事的文件.如果void*不能转换为类实例,它会返回`nullptr`还是破坏指针? (3认同)
  • @MarceloCantos:为什么你会使用比你需要的更危险的演员呢? (2认同)
  • +1 @MarceloCantos:不,确实是对的.`static_cast`用于反转隐式转换,类指针指向void指针是隐式转换. (2认同)
  • 好的,我会接受我的肿块.我一直在假设将`void*`转换为`X*`应该总是使用`reinterpret_cast`,因为这就是它的用途.我纠正了. (2认同)