转换为无效*

Max*_*rai 5 c++ pointers casting void

如何将我自己的类的任何对象转换为指向void的指针?

MyClass obj;
(void*)obj; // Fail
Run Code Online (Sandbox Code Playgroud)

Dar*_*ust 11

MyClass obj;
void *p;

p = (void*)&obj; // Explicit cast.
// or:
p = &obj; // Implicit cast, as every pointer is compatible with void *
Run Code Online (Sandbox Code Playgroud)

但要小心!obj以这种方式在堆栈上分配,一旦离开函数,指针就变为无效.

编辑:更新以显示在这种情况下不需要显式强制转换,因为每个指针都与void指针兼容.

  • @DarkDust:不是**每个**指针都是"兼容的"(你的意思是,可以隐式转换)到`void*`.例如,如果没有`const_cast`,就不能将`const char*`转换为`void*` (2认同)
  • 术语:演员表是一种显式转换.隐式转换不是强制转换. (2认同)

Arm*_*yan 6

你不能将非指针转换为void*.您需要将指针转换为您的对象void*

(void*)(&obj); //no need to cast explicitly.
Run Code Online (Sandbox Code Playgroud)

转换是隐含的

void* p = &obj; //OK
Run Code Online (Sandbox Code Playgroud)


Con*_*ius 5

如果使用地址,则可以将其转换为void指针.

MyClass obj;
void *ptr = (void*)&obj; // Success!
Run Code Online (Sandbox Code Playgroud)