簡體   English   中英

C ++中的Sizeof以及如何計算指針長度?

[英]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),這些綁定的實例方法可用作算法的回調。

MSDN頁面上有關sizeof的信息

將sizeof運算符應用於引用時,結果與將sizeof應用於對象本身相同

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

rowbuf是一個DataObj & 因此,您希望sizeof(rowbuf)等於sizeof(DataObj)

前幾天,我了解到Visual Studio 調試器存在一個帶有sizeof和引用的錯誤。 它實際上將為您提供指針的大小,而不是對象的大小。 編譯器做正確的事。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM