std::swap(*(void **)x, *(void **)y)y是什么意思

What does it mean std::swap(*(void **)x, *(void **)y)?

本文关键字:void 是什么 意思 swap std      更新时间:2023-10-16

我刚刚读了这个答案 虚拟函数和 vtable 是如何实现的?响应的作者使用以下表达式:

std::swap(*(void **)x, *(void **)y);
// Now x is a C, and y is a B! Hope they used the same layout of members!

有人可以解释它是如何工作的吗?为什么以及(void **) operator*是什么意思?

它涉及未定义的行为,因此不能保证有效。

基本思想是,xy 是指向相同基类型的对象的指针,其中该类型至少有一个虚函数,并且编译器通过在每个对象的最开头放置一个 vtable 指针来实现虚函数机制(即偏移量 0)。这是迄今为止最常见的做事方式。但不是唯一的方法。

然后,交换假定这些 vtable 指针的大小与 void* 相同。