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)

先日、VisualStudioデバッガーにバグsizeofと参照があることを知りました。オブジェクトのサイズではなく、実際にはポインタのサイズが表示されます。コンパイラは正しいことをします。

于 2009-09-13T15:02:52.847 に答える