【发布时间】:2013-12-26 01:07:21
【问题描述】:
以下可移植且符合标准的 C++ 是否总是返回“成功”?
#include <iostream>
#include <cstddef>
struct Containing {
struct {
Containing * get_containing () {
return reinterpret_cast<Containing *> (
(char *) this - offsetof (Containing, inner)
);
}
} inner;
};
int main () {
Containing c;
std::cout
<< (c.inner.get_containing () == &c ? "success" : "fail")
<< std::endl;
}
【问题讨论】:
-
好的,我删除了可能重复的问题。我唯一的问题是:“这是否符合标准?”顺便说一句,“重复问题”投票开始让 Stackoverflow 变得无用,因为投票结束的人似乎没有阅读所问的内容。
-
我确实阅读了被问到的内容;)也就是说,我现在撤回了近距离投票,因为编辑意味着不再有真正的重叠......
-
顺便说一句,这里有一个稍微复杂一些但失败的例子:ideone.com/2sr2JF。您需要向
char *添加一些演员表,以使这项工作更普遍(尽管有UB)。 -
谢谢。似乎足以投射
this。 -
计算“这个指针”是什么意思?你想得到 VTable 吗?为此,您可以这样做:
DWORD* VTable = *reinterpret_cast<DWORD**>(&SomeInstance);.. 再说一次,我不确定这是否是您想要的..
标签: c++ inner-classes pointer-arithmetic