std::swap(*(void **)x, *(void **)y)y是什么意思
What does it mean std::swap(*(void **)x, *(void **)y)?
我刚刚读了这个答案 虚拟函数和 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*
是什么意思?
它涉及未定义的行为,因此不能保证有效。
基本思想是,x
和 y
是指向相同基类型的对象的指针,其中该类型至少有一个虚函数,并且编译器通过在每个对象的最开头放置一个 vtable 指针来实现虚函数机制(即偏移量 0)。这是迄今为止最常见的做事方式。但不是唯一的方法。
然后,交换假定这些 vtable 指针的大小与 void*
相同。
相关文章:
- "Warning : No return statement in function returning non-void"是什么意思?
- 在C++中将uint64_t转换为void类型的目的是什么
- 退货<void>是什么意思?
- (void *)1 是什么意思
- 使用 static_cast() 的目的是什么<void>?
- "template<class C> void mini(C &a4, C b4) { a4 = min(a4, b4); }"定义的含义是什么?
- "conversion from void to non scalar type string"是什么意思?
- :void setData(const Color * & data_ptr)中的 *& 是什么意思;
- 这个结构是什么:"void dot::print(void){"?
- 使用“void”来专门化模板的规则是什么?
- C++中的大小释放:全局运算符delete的正确行为是什么(void*ptr,std::size_t size)
- 'auto f(params) -> decltype(..., void())' 中的 'void()' 是做什么的?
- (void*)和的含义是什么
- void() 用作模板参数时是什么意思
- typedef void (*MyCallback) : 它是什么以及如何使用它
- bind(<void>ref(acc), _1) 是什么意思?
- *(void**)是什么意思
- "%p 格式说明符的参数类型是 'void*'"是什么意思?
- 'typename Enable = void'是什么意思?
- "Invalid operands to binary expression (ostream and void)"是什么意思,如何解决?