我正在尝试将现有代码调整为64位机器.主要问题是在一个函数中,前一个编码器使用void*参数,该参数在函数本身中转换为合适的类型.一个简短的例子:
void function(MESSAGE_ID id, void* param)
{
    if(id == FOO) {
        int real_param = (int)param;
        // ...
    }
}
当然,在64位机器上,我收到错误:
error: cast from 'void*' to 'int' loses precision
我想纠正这个问题,以便它仍然可以在32位机器上运行并且尽可能干净.任何的想法 ?
101当我将之前的内容分配x给新的时,为什么不输出x?
int x = 101;
{
    int x = x;
    std::cout << x << std::endl;
}
输出(垃圾):
422634
我认为第二个x将初始化为101  但它没有初始化.
注意:在这种情况下的解决方案是int x = ::x但问题是它发生的原因.
将指针转换为int并稍后再返回指针是否安全?
如果我们知道指针是否为32位长且int是32位长怎么样?
long* juggle(long* p) {
    static_assert(sizeof(long*) == sizeof(int));
    int v = reinterpret_cast<int>(p); // or if sizeof(*)==8 choose long here
    do_some_math(v); // prevent compiler from optimizing
    return reinterpret_cast<long*>(v);
}
int main() {
    long* stuff = new long(42);
    long* ffuts = juggle(stuff); 
    std::cout << "Is this always 42? " << *ffuts << std::endl;
}
这是否包含在标准中?