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

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

__offsetof_base(D, B)
B は、D の明白な非仮想ベースクラスである必要があります。
D オブジェクトの開始位置から、そのオブジェクト内の B ベースサブオブジェクトの開始位置までのオフセットを返します。結果がゼロになることもあります。以下の例では、static_cast<B*>(p) と等価なコードを実装するために D* 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 式内では使用できません。
関連する概念
7.26 コンパイラでの組み込みアセンブラのサポート
7.29 C および C++ コードの組み込みアセンブリ言語関数の制限
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.