C ++中的Sizeof以及如何计算指针长度?

时间:2009-09-13 14:46:37

标签: c++ pointers sizeof

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

// 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 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:3)

来自MSDN page about sizeof

  

应用sizeof运算符时   一个参考,结果是一样的   如果sizeof已应用于   对象本身

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

答案 3 :(得分:1)

rowbufDataObj &。因此,您希望sizeof(rowbuf)等于sizeof(DataObj)

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