C++ 交换两个 void* 的内容

C++ swap content of two void*

是否可以交换两个空指针的内容?我尝试通过取消引用两个指针来交换值:

void* a = (void*)50;
void* b = (void*)90;
*a = *b;

但是,最后一行会引发错误,因为无法取消引用 void 指针。

我认为可以通过首先将 b 的值转换为 int 然后将其转换回 void* 来实现,如下所示:

void* a = (void*)50;
void* b = (void*)90;

int value = (int)b;
a = (void*)value; //a now equals b

不幸的是,这需要我们知道 a 和 b "supposed" 是什么类型(我不知道这样的描述是否正确),在那种情况下,它们是整数。是否可以在不知道 "original" 类型的情况下交换两个空指针的内容?

谢谢。

不,那不可能。为了做这样的事情,关于两个指针指向的对象大小的信息必须在运行时出现在某个地方,但事实并非如此。此外,有些类型不可简单复制,因此,交换它们的字节可能不会交换它们的值,并可能导致未定义的行为。

Is it possible to swap the content of two void pointers without knowing their "original" types?

如果您不了解类型,那么不,这是不可能的。至少,您必须知道类型的大小。这仅适用于 trivially copyable 类型。