You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++用reinterpret_cast转char*为int报loses precision错误含义是什么?

错误含义解释

这个编译错误的核心是提示你类型长度不匹配导致转换会丢失数据,具体原因如下:

  • 你当前运行代码的环境是64位系统,64位环境下所有指针类型(这里的char*属于指针)的长度是8字节,但C++标准中int的常规长度是4字节。将8字节的指针值强制塞进4字节的int变量中,必然会截断高位数据,导致最终拿到的整数值和原指针值不一致,也就是报错里提到的「loses precision(丢失精度)」。
  • 后缀的[-fpermissive]是提示你如果要强行忽略这个风险编译,可以在编译指令中加上-fpermissive参数放宽编译器校验,但非常不推荐这么做。

另外你的代码里还有一个隐藏的不规范写法:char *p = "This is a string";在C++11及更高版本标准中属于非法写法,字符串字面量本身是const char*类型,直接赋值给无const修饰的char*会丢弃常量限定符,也会触发编译警告或错误。

如果你确实需要将指针转为整数存储,正确的做法是使用标准库定义的和指针长度匹配的无符号整数类型uintptr_t,修改后代码如下:

#include <iostream>
#include <cstdint> // 引入uintptr_t定义的头文件
using namespace std;

int main()
{
    uintptr_t i;
    const char *p = "This is a string"; // 补全const修饰
    i = reinterpret_cast<uintptr_t>(p);
    cout << i;
    return 0;
}

内容的提问来源于stack exchange,提问作者Arpitha Prakash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:09:02