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

C++ ——— 单/多参数构造函数的隐式类型转换和 explicit 关键字

单参数构造函数

代码演示:

class A
{
public:A(int i):_a(i){}private:int _a;
};

在 A 这个类中的构造函数只有一个参数,这就称之为单参数的构造函数


不同形式实例化对象

代码演示:

A a1(1);A a2 = 2;

a1 的实例化过程:

第一个实例化对象 a1 是直接调用构造函数进行初始化的

a2 的实例化过程:

而第二个实例化对象 a2 是常量 2 调用构造函数生成一个临时对象,再用这个临时对象拷贝构造 a2 进行初始化的

但是编译器会对以上过程进行优化,优化为用 2 这个常量直接构造


验证 a2 是否是直接构造

代码演示:

class A
{
public:// 构造A(int i):_a(i){cout << "A(int i)" << endl;}// 拷贝构造A(const A& a):_a(a._a){cout << "A(const A& a)" << endl;}private:int _a;
};

对构造函数和拷贝构造函数都加上打印,看是否打印了拷贝构造就能知道 a2 是否是直接构造

代码验证:

可以看出,实例化 a1 和 a2 时都只调用了构造函数,并没有调用拷贝构造函数


explicit 关键字

关键字的作用是阻止隐式类型转换,这个关键字一般添加在构造函数的开始

代码演示:

explicit A(int i):_a(i)
{cout << "A(int i)" << endl;
}

加上 explicit 关键字后,让常量2直接拷贝 a2 就不支持了


多参数拷贝函数的隐式类型转换

代码演示:

class A
{
public:// 构造A(int i,int k):_a1(i),_a2(k){cout << "A(int i,int k)" << endl;}private:int _a1;int _a2;
};

在 A 这个类中有两个成员变量,构造函数的参数中也是两个,所以是多参数的拷贝函数

那么多参数拷贝函数如何隐式类型转换

代码演示:

A a1(1, 2);A a2 = { 1,2 };

可以像 a1 一样直接调用拷贝构造函数实例化

也可以像 a2 一样通过隐式类型准换实例化,但是不能用小括号括起来,要用大括号才可以

代码验证:

可以看到,和单参数构造函数一样,优化成了直接构造 

http://www.lryc.cn/news/512758.html

相关文章:

  • Java编程规约:集合处理
  • IOS safari 播放 mp4 遇到的坎儿
  • plsql :用户system通过sysdba连接数据库--报错ora-01031
  • LabVIEW条件配置对话框
  • PyAudio库基本知识详解——为自制PCM音频播放器做准备
  • Git如何添加子仓库
  • 001__VMware软件和ubuntu系统安装(镜像)
  • 在国产电脑上运行PDFSAM软件使用pdf分割合并交替混合处理pdf文档
  • STM32完全学习——FATFS0.15移植SD卡
  • Linux -- 生产消费模型之环形队列、信号量
  • Ashy的考研游记
  • MySQL线上事故:使用`WHERE`条件`!=xxx`无法查询到NULL数据
  • vue3学习笔记(11)-组件通信
  • 【PDF物流单据提取明细】批量PDF提取多个区域内容导出表格或用区域内容对文件改名,批量提取PDF物流单据单号及明细导出表格并改名的技术难点及小节
  • 张量与数据类型
  • torchvision.utils.make_grid 解释下
  • Android原生Widget使用步骤
  • 实验八 指针2
  • 1 数据库(下):多表设计 、多表查询 + SQL中的with查询语法(MySQL8.0以后版本才支持这种新语法)+ 数据库优化(索引优化)
  • 什么是.net framework,什么是.net core,什么是.net5~8,版本对应关系
  • vulhub-wordpress靶场
  • 安装与配置
  • 斗鱼Android面试题及参考答案
  • Could not install Gradle distribution from 的解决办法
  • 基于 SensitiveWordBs 实现敏感词过滤功能
  • 网络安全威胁2024年中报告
  • 批次特征组杂记
  • 【HarmonyOS】解决自定义弹框和键盘之间安全距离的问题
  • 如何在LabVIEW中更好地使用ActiveX控件?
  • 【视觉SLAM:四、相机与图像】