[英]Can I legally cast a pointer to a struct member to a pointer to the struct?
考慮這樣的結構,例如:
struct Foo
{
int a, b;
};
如果我有一個指針ptr
到int
,我知道點到b
在Foo
結構,是合法的,這樣做呢?
Foo *foo = reinterpret_cast<Foo*>(reinterpret_cast<char*>(ptr) - offsetof(Foo, b));
如果是這樣,這對任何結構合法嗎? 如果沒有,是否有任何合法方法可以達到同樣的效果?
從http://en.cppreference.com/w/cpp/types/offsetof :
宏offsetof擴展為
std::size_t
類型的常量,其值是從指定類型的對象的開頭到其指定成員的偏移量(以字節為單位),包括填充(如果有)。如果type不是標准布局type ,則行為未定義。
對於非標准布局類型的類和結構,此方法可使用offsetof
進行不確定的行為。
對於標准布局類型的類和結構,我看不到任何潛在的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.