相关疑难解决方法(0)

将指针转换为整数

我正在尝试将现有代码调整为64位机器.主要问题是在一个函数中,前一个编码器使用void*参数,该参数在函数本身中转换为合适的类型.一个简短的例子:

void function(MESSAGE_ID id, void* param)
{
    if(id == FOO) {
        int real_param = (int)param;
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,在64位机器上,我收到错误:

error: cast from 'void*' to 'int' loses precision
Run Code Online (Sandbox Code Playgroud)

我想纠正这个问题,以便它仍然可以在32位机器上运行并且尽可能干净.任何的想法 ?

c++ 64-bit gcc casting 32-bit

77
推荐指数
5
解决办法
15万
查看次数

C++中的声明点

101当我将之前的内容分配x给新的时,为什么不输出x

int x = 101;
{
    int x = x;
    std::cout << x << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

输出(垃圾):

422634

我认为第二个x将初始化为101 但它没有初始化.

注意:在这种情况下的解决方案是int x = ::x但问题是它发生的原因.

c++

33
推荐指数
2
解决办法
1705
查看次数

C++:将指针转换为int并稍后再返回指针是否安全?

将指针转换为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;
}
Run Code Online (Sandbox Code Playgroud)

这是否包含在标准中?

c++ pointers

24
推荐指数
4
解决办法
1万
查看次数

标签 统计

c++ ×3

32-bit ×1

64-bit ×1

casting ×1

gcc ×1

pointers ×1