鑒于以下設定...
struct A {unsigned char _data;};
struct B {unsigned char _data;};
struct C {A a; B b;};
// in this context (ar) is known to be the "a" of some C instance
A& ar = ...;
B& br = get_sister(ar); // the "b" of the same C instance that (ar) belongs to
C& cr = get_parent(ar); // the C instance that (ar) belongs to
...我如何在沒有 UB(未定義的行為)的情況下獲取br
和獲取?cr
ar
uj5u.com熱心網友回復:
只有當您知道參考成員的事實時,您才能使用(在這種情況下應該回傳 0,因為它是 的第一個非靜態資料成員,但最好不要假設)來幫助您訪問物件,例如:ar
C::a
offsetof()
a
C
C
C& get_parent(A& ar)
{
return *reinterpret_cast<C*>(reinterpret_cast<char*>(&ar) - offsetof(C, a));
}
B& get_sister(A& ar)
{
return get_parent(ar).b;
}
在線演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/470454.html