有人可以为我解释以下代码段吗?
// Bind base object so we can compute offsets
// currently only implemented for indexes.
template<class DataObj> void BindAsBase(DataObj &rowbuf)
{
// Attempting to assign working_type first guarantees exception safety.
working_type = DTL_TYPEID_NAME (rowbuf);
working_addr = reinterpret_cast<BYTE*>(&rowbuf);
working_size = sizeof(rowbuf);
}
我的问题是sizeof(rowbuf)的结果是什么?它是DataObj的长度还是Byte *的长度?为什么呢?
另一个问题:为什么需要计算指针的偏移量?它的常用用途是什么?
sizeof(working_addr)等于什么?
答案 0 :(得分:5)
sizeof(rowbuf)返回DataObj类型的对象的长度(以字节为单位)。 请注意,rowbuf是 no 指针,但它是一个非常不同的引用。
如果要计算y DataObj指针的大小,请使用sizeof(&amp; rowbuf)或sizeof(DataObj *)。
答案 1 :(得分:3)
sizeof(rowBuf)是DataObj类型使用的字节数。它是在编译时计算的。
通常需要在不知道对象的情况下调用给定实例上的方法(所谓的方法绑定,如在boost :: bind中),这些绑定的实例方法可以用作算法的回调。
答案 2 :(得分:3)
应用sizeof运算符时 一个参考,结果是一样的 如果sizeof已应用于 对象本身
所以sizeof(rowbuf)== sizeof(DataObj)
答案 3 :(得分:1)
rowbuf
是DataObj &
。因此,您希望sizeof(rowbuf)
等于sizeof(DataObj)
。
前几天我了解到Visual Studio 调试器有一个sizeof
和引用的错误。它实际上会给你一个指针的大小而不是对象的大小。编译器做了正确的事。