組み込みアセンブラの関連ベースクラスの __offsetof_base キーワード

__offsetof_base キーワードを使用して、オブジェクトの開始位置から、そのオブジェクト内のベースクラスサブオブジェクトまでのオフセットを決定できます。

__offsetof_base(D, B)

B は、D の明白な非仮想ベースクラスである必要があります。

D オブジェクトの開始位置から、そのオブジェクト内の B ベースサブオブジェクトの開始位置までのオフセットを返します。結果がゼロになることもあります。Example 45 に、static_cast<B*>(p) と等価なコードを実装するために D* p に加算する必要のあるオフセット(バイト単位)を示します。

Example 45. static_cast<B*>(p)

__asm B* my_static_base_cast(D* /*p*/) // 以下と等価:
                                       // return static_cast<B*>(p)
{
    if __offsetof_base(D, B) <> 0 // ゼロオフセットのケースを最適化する
        ADD r0, r0, #__offsetof_base(D, B)
    endif
    BX lr
}

__offsetof_base__mcall_*、および _vcall_offsetof_vfunc の各キーワードは、アセンブラソース内で整数定数または論理定数に変換されます。これらのキーワードは、__asm 関数内でのみ使用でき、__cpp 式内では使用できません。

Show/hide関連項目

Copyright © 2010 ARM. All rights reserved.ARM DUI 0472BJ
Non-ConfidentialID011811