C++隐式类型转换问题

问题描述:隐式类型转换问题

cpp 复制代码
if (optimize_param.dynamic_lds_size > 64UL * 1024UL)

这里在64后面加上UL表示"usigned long"类型的常量,为了防止在计算或者比较过程中出现类型转换的问题。

举例说明隐式类型转换问题:

cpp 复制代码
#include <iostream>

int main(int argc, char const *argv[])
{
    unsigned int a = 10000U;
    int b = -1;
    /*
    详细说明:-1在计算机中以二进制补码的方式存储,即 1111 1111 1111 1111 1111 1111 1111 1111。
    int b = -1;        将 1111 1111 1111 1111 1111 1111 1111 1111 按照int类型解释,即-1
    转成unsigned int即,将 1111 1111 1111 1111 1111 1111 1111 1111 按照unsigned int类型解释,即4,294,967,295
    */
    if (a > b) // 这里进行比较的时候,b隐式的转成了a的类型unsigned int类型。即:b 变成 2^32大小
    {
        std::cout << "a > b" << std::endl;
    }
    else
    {
        std::cout << "a < b" << std::endl;
    }
    
    return 0;
}

修改方案:使用显式类型转换

隐式类型转换可能导致二进制解释的不一致,显示类型转换是让数据表示类型一致。

隐式类型转换中特别是 有符号和无符号之间得转换 会有二进制解释得问题。

cpp 复制代码
#include <iostream>

int main(int argc, char const *argv[])
{
    unsigned int a = 10000U;
    // int b = -1;
    int b = static_cast<unsigned int>(-1); //使用显式类型转换避免隐式类型转换存在的问题

    if (a > b)
    {
        std::cout << "a > b" << std::endl;
    }
    else
    {
        std::cout << "a < b" << std::endl;
    }
    
    return 0;
}
相关推荐
外收内放4 分钟前
FastAPI猜字谜实战(6):日志与异常
开发语言·python·学习·fastapi
垆边人似月.8 分钟前
预处理与参数调优(让识别率从“能看”到“可用”)
开发语言·python·自然语言处理
泡泡糖的中文规格书22 分钟前
HDLbits 2.2 学习笔记 · 多路复用器
java·开发语言
John_Hui25 分钟前
第 3 篇:配置 JDK 17 环境
java·开发语言·ubuntu
鶴哥只手遮天34 分钟前
AFSIM 2.9.0 深度解析:架构、原理与工程实践-第 1 章 项目全景与代码地图
c++
充值内卷39 分钟前
C++单文件迷宫游戏:TauriCPP 开发全记录
开发语言·c++·游戏
Antruly40 分钟前
C++ Web 开发选型漫谈:从 Drogon 到 libuvcpp + uvp,八个项目的定位、兼容性与务实排名
开发语言·前端·c++
EnCi Zheng44 分钟前
AI Agent工具调用防护层怎么写-一份能直接跑的Python四层拦截实现
大数据·开发语言·python
香蕉大香蕉(06敬畏市场)1 小时前
高频八股 · Java 并发编程(10):异步、ThreadLocal 与虚拟线程(收官)
java·开发语言·网络·jvm·python·ai·实习
念何架构之路1 小时前
Go reflect包值操作 Value 的读写、可设置性与 interface 布局
开发语言·后端·golang