0

有人可以为我解释以下代码片段吗?

// 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) 等于多少?

4

4 回答 4

5

sizeof(rowbuf) 返回 DataObj 类型对象的长度(以字节为单位)。请注意,rowbuf不是指针,但它是一个非常不同的引用。

如果要计算 y DataObj 指针的大小,请使用 sizeof(&rowbuf) 或 sizeof(DataObj*)。

于 2009-09-13T14:56:26.687 回答
3

sizeof(rowBuf) 是 DataObj 类型使用的字节数。它是在编译时计算的。

通常需要在不知道对象的情况下调用给定实例上的方法(所谓的方法绑定,如 boost::bind 中的),这些绑定的实例方法可以用作算法的回调。

于 2009-09-13T14:56:58.537 回答
3

关于 sizeof 的 MSDN 页面

当 sizeof 运算符应用于引用时,结果与将 sizeof 应用于对象本身的结果相同

所以 sizeof(rowbuf) == sizeof(DataObj)

于 2009-09-13T14:57:10.647 回答
1

rowbuf是一个DataObj &。所以你期望sizeof(rowbuf)等于sizeof(DataObj)

前几天我了解到 Visual Studio调试器有一个错误sizeof和引用。它实际上会给你一个指针的大小而不是对象的大小。编译器做正确的事。

于 2009-09-13T15:02:52.847 回答