C ++到Delphi的转换。 `this`指针

时间:2018-05-30 07:00:51

标签: c++ delphi this

在C ++中:

static_cast<unsigned int>(reinterpret_cast<unsigned int>(&this[-0x00003111]))

我不理解&this[-0x00003111]

我无法理解&#34; [ - 地址]&#34;

如何将其转换为delphi代码?

1 个答案:

答案 0 :(得分:1)

这是一段奇怪的代码。要理解这一点,必须考虑operator precedences

然而,重要的缺失部分是class引用的this。我认为这是在class A的方法中发生的。以下代码与

相同
static_cast<unsigned int>(reinterpret_cast<unsigned int>(&this[-0x00003111]))

但使用分隔的表达式:

A *pThis = this;
A &a = pThis[-0x00003111]; // aka. A &a = *(pThis - 0x00003111);
A *pA = &a;
unsigned int ui = reinterpret_cast<unsigned int>(pA);
unsigned int ui2 = static_cast<unsigned int>(ui);

(为了完成这个编译,我必须使用-fpermissive。)

考虑到现在64位CPU是非常常见的,值得一提的是unsigned int可能只有32位,在这种情况下this指针有64位。因此,在这种情况下,reinterpret_cast会截断一半的比特。

Life Demo on coliru

亲爱的孩子们。

请不要在家里这样做。