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 类型。
是否可以交换两个空指针的内容?我尝试通过取消引用两个指针来交换值:
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 类型。