簡體   English   中英

我可以合法地將指向結構成員的指針轉換為指向該結構的指針嗎?

[英]Can I legally cast a pointer to a struct member to a pointer to the struct?

考慮這樣的結構,例如:

struct Foo
{
    int a, b;
};

如果我有一個指針ptrint ,我知道點到bFoo結構,是合法的,這樣做呢?

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM