【发布时间】:2011-11-20 04:20:00
【问题描述】:
正如标题所说,我目前正在用 C++ 中的指针做一些小技巧,但有些东西没有解决,这就是我得到的:
uintptr_t texture_pointer = (int)((void*) &texture);
其中纹理是一个类;这似乎工作正常,因为我得到了一个指针值,并且我保证我在我的另一个函数中得到了相同的值,这应该让对象取回;这是失败的代码:
std::cout << "C++ BEFORE: " << texture_pointer << std::endl;
Texture texture = *(Texture*)((void*) texture_pointer);
std::cout << "C++ AFTER: " << (uintptr_t)((void*) &texture) << std::endl;
我排除的输出;是不是两者的数字相同,但是我得到了两个不同的数字,因此我认为肯定有错误,但我似乎找不到。
示例输出:
C++ BEFORE: 2685236
C++ AFTER: 2684960
【问题讨论】:
-
“在 C++ 中使用指针的一些小技巧”几乎从来都不是一个好主意。你想达到什么目的?
-
在许多 64 位架构上 sizeof(int) != sizeof(void*),检查一下。
-
是否涉及子类化?
-
@@Ben uintptr_t 不确保它的大小相同吗?
-
请不要这样做。为自己节省数小时的痛苦和重新编码。请不要这样做。
标签: c++ pointers casting void-pointers