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

标签 c++ pointers casting void-pointers

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

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 “应该”是什么类型(我不知道这样的描述是否正确),在那种情况下,它们是整数。是否可以在不知道“原始”类型的情况下交换两个空指针的内容?

谢谢。

最佳答案

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

关于C++ 交换两个 void* 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37976205/

相关文章:

c++ - 如何在 Visual C++ 中创建非托管 Windows GUI?

c - char * 和 char[] 的区别

C - 使用 typedef 时如何从用户获取字符串?

Java - 识别值类型的模式

当您取消引用空指针时,您能证明为什么强制转换很重要吗?

c++ - std type_traits 与 Qt type_traits 冲突

c++ - 数组赋值无效?

c++ - 如何循环继承自 boost::any 中包含的 std::vector 的类

c - 返回 0 时发出 SIGABRT 信号

ios - 将 NSDictionary 转换为字典 Swift