[英]Sizeof in C++ and how to calculate pointer length?
有人可以為我解釋以下代碼段嗎?
// 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)等於多少?
sizeof(rowbuf)返回DataObj類型的對象的長度(以字節為單位)。 請注意,rowbuf 不是指針,但它是一個引用,有很大的不同。
如果要計算y DataObj指針的大小,請使用sizeof(&rowbuf)或sizeof(DataObj *)。
sizeof(rowBuf)是DataObj類型使用的字節數。 它是在編譯時計算的。
通常,需要在不知道對象的情況下調用給定實例上的方法(所謂的方法綁定,如boost :: bind),這些綁定的實例方法可用作算法的回調。
rowbuf
是一個DataObj &
。 因此,您希望sizeof(rowbuf)
等於sizeof(DataObj)
。
前幾天,我了解到Visual Studio 調試器存在一個帶有sizeof
和引用的錯誤。 它實際上將為您提供指針的大小,而不是對象的大小。 編譯器做正確的事。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.