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

理解c++中explicit关键字的作用

理解c++中explicit关键字的作用

explicit 关键字的作用是防止构造函数被隐式调用,从而避免意外的类型转换

#include <iostream>
class Vec3 {
public://构造函数没有被explicit修饰Vec3(float value): x(value), y(value), z(value){}Vec3(float val1, float val2, float val3): x(val1), y(val2), z(val3){}void print() const {std::cout << "x: " << x << ", y: " << y << ", z: " << z << std::endl;}
private:float x, y, z;
};int main() {Vec3 v1(1.0f); //显式调用单值构造函数v1.print();Vec3 v2 = 1.0f;//由于vec3构造函数没有被explicit修饰,所以可以发生隐式调用,发生隐式转换,float转为vec3v2.print();Vec3 v2(1.0,2.0,3.0);//Vec3 v2 = (1.0, 2.0, 3.0);//这个是错误的v2.print();return 0;
}

如果构造函数没有被explicit修饰,则允许发生隐式调用,而隐式调用会发生隐式转换,即float转换为自定义vec3

Vec3 v2 = 1.0f; //隐式调用构造函数,有点像赋值操作,使得读代码的人有点迷惑,可以在单参数构造函数前添加explicit禁用这种调用构造函数的方式

explicit 只能用于修饰单参数构造函数,不能用于普通成员函数或静态函数

隐式转换可能带来以下不良影响
意外行为:隐式转换可能导致程序行为与预期不符,尤其是在类型不匹配或转换规则复杂时。
性能问题:隐式转换可能引入额外的开销,例如创建临时对象或调用额外的构造函数。
代码可读性降低:隐式转换可能使代码难以理解,开发者可能无法直观地看出转换发生的位置和原因。
类型安全性降低:隐式转换可能导致类型安全问题,例如将一个类型错误地转换为另一个类型,导致潜在的运行时错误。
调试困难:隐式转换可能隐藏问题的根源,增加调试的复杂性。

为了防止隐式转换带来的不良影响,我们还是对单参数构造函数使用explicit修饰,防止隐式调用单参数构造函数

#include <iostream>class Vec3 {
public:// 使用 explicit 防止隐式转换//构造函数explicit Vec3(float value) : x(value), y(value), z(value) {}void print() const {std::cout << "Vec3(" << x << ", " << y << ", " << z << ")" << std::endl;}private:float x, y, z;
};int main() {Vec3 v1(1.0f); // 正确:显式调用构造函数v1.print();// Vec3 v2 = 1.0f; //隐式调用构造函数,错误:explicit 禁止隐式转换// v2.print();return 0;
}
//禁用隐式调用单参数构造函数
Vec3 v2 = 1.0f //无法将浮点类型float转换为类Vec3
//只允许显式调用单参数构造函数
Vec3 v1(1.0f);

隐式调用单参数构造函数由于explicit修饰而被禁用

相关文章:

  • 【文献阅读】地方政府驱动企业参与乡村振兴的机制——乡村振兴注意力视角的分析
  • 多智体具身人工智能:进展与未来方向(上)
  • 控制台打印带格式内容
  • 共享内存与信号量结合
  • 细说getOutputStream()方法
  • 华为云服务器:产业升级的“数字神经中枢”​
  • 磁盘损坏无法读取的深度解析与数据救援实战指南
  • 带防护的操作
  • 【React】Craco 简介
  • 从零开始开发纯血鸿蒙应用之XML解析
  • split和join的区别‌
  • 【JEECG 组件扩展】JSwitch开关组件扩展单个多选框样式
  • 优化理赔数据同步机制:从4小时延迟降至15分钟
  • Java 程序流程控制篇
  • 构建 PostGIS 与 pgRouting容器镜像:打造强大的地理空间分析
  • Qt开发经验 --- 避坑指南(13)
  • 【多模态】IMAGEBIND论文阅读
  • MCP 传输层代码分析
  • 什么是建行财资云,招行CBS,光大跨行通
  • 什么是 ANR 如何避免它
  • 英国收紧移民政策,技术工作签证、大学招生面临更严要求
  • 外媒:初步结果显示,菲律宾前总统杜特尔特当选达沃市市长
  • 中医的千年传承:网络科学描绘其演化之路|PNAS速递
  • 三大股份制银行入局AIC,一级市场再迎“活水”
  • 云南多地突查公职人员违规饮酒:公安局门口开展酒精吹气测试
  • 多地再发网约车从业及投资风险提示:避免盲目花费大笔资金“购车”入行