当前位置: 首页 > news >正文

对隐式类型转换保持警觉

  1. 操作符重载引起的隐式类型转换
    缺点:可能导致非预期的函数被调用
    解决:以功能对等的另一个函数取代类型转换操作符
    举例:
    class Rational{
    public:
    Rational(int num = 0,int deno = 1):num_(num),deno_(deno){};
    operator double() const{
    return static_cast(num_/deno_);
    }
    private:
    int num_;
    int deno_;
    };

Rational r(1,2);
cout << r; //Rationl隐式转换为double类型,可能非预期的行为

使用asDouble()函数取代:
class Rational{
public:
...
double asDouble() const{
return static_cast(num_/deno_);
}
};

  1. 类型转换构造函数引起的隐式类型转换
    解决方案: 1、使用C++新特性 explicit,仅支持显式转换
    2、类包含一个以上的“用户定制行为”
    template
    class Array{
    public:

class ArraySize{
public:
ArraySize(inr num):theSize(num){}
int size() const{return theSize;};
private:
int theSize;
};

Array(int lowBound,int highBound);
Array(ArraySize size);
bool operator==(const Array& lhs,
const Array& rhs);
...
};

Array a(10); //对象调用int转换为ArraySize,再转换为Array的隐式转换行为是被允许的
Array b(10);
for(int i = 0; i < 10;++i)
if(a == b[i])... //如此类内部需要调用两个用户定制转换行为,一个将int转换为ArraySize,
//另一个将ArraySize转换为Array,如此的隐式转换是被禁止的

http://www.jsqmd.com/news/36777/

相关文章:

  • es中批量删除数据
  • docker安装mysql/Redis/nacos/minio/es/xxl-job
  • 低代码高价值场景:让设备管理真正成为企业数字化资产
  • re-BABYRE-攻防世界
  • 二维数组去重
  • Pinely Round 5 (Div. 1 + Div. 2) A-D细解
  • 2025年三相滤波器源头厂家权威推荐榜单:EMI电源滤波器/防雷滤波器/电源滤波器源头厂家精选
  • UT010029: Stream is closed
  • 官宣上线!RocketMQ for AI:企业级 AI 应用异步通信首选方案
  • GD32VW553-IOT V2 测评和移植 - 实践
  • 什么是 FFmpeg:开源免费的多媒体处理框架 - 实践
  • AI元人文宪章:在缺陷中前行——价值权衡时代的协作体系
  • 2025年台湾铨盛仪表公司口碑推荐榜
  • 2025年靠谱的藤椒火锅底料口碑推荐榜单
  • 2025年离心管道风机定制厂家推荐排行榜
  • zed odoo lsp配置
  • Raylib 音乐和音效
  • oh-my-zsh又双叒叕出问题了......
  • 读书笔记:并行 DML:批量数据修改的“超级加速器”
  • 2025年镀锌钢格板品牌推荐排行榜单
  • 低代码高频实践场景系列之一——EHS系统
  • 高端UI设计公司的“审美模型”:如何让界面更有记忆点?
  • 2025年提分系统系统怎么选
  • 2025年智能中高考加盟电话供应商怎么选择
  • 2025年11月10日
  • 2025年想象力教育科技有限公司推荐口碑排行
  • 2025年肃宁双十一眼镜品牌权威推荐榜单:眼镜/眼睛价格/眼镜店品牌精选
  • 2025年半导体封装锡膏定制厂家口碑推荐
  • 线性特征和非线性特征
  • 2025年锡熔液抗氧化还原粉厂家排行榜