当前位置: 首页 > 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 一样通过隐式类型准换实例化,但是不能用小括号括起来,要用大括号才可以

代码验证:

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

相关文章:

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

单参数构造函数 代码演示&#xff1a; class A { public:A(int i):_a(i){}private:int _a; }; 在 A 这个类中的构造函数只有一个参数&#xff0c;这就称之为单参数的构造函数 不同形式实例化对象 代码演示&#xff1a; A a1(1);A a2 2; a1 的实例化过程&#xff1a; 第…...

Java编程规约:集合处理

文章目录 I 集合处理【强制】【推荐】II 知识扩展I 集合处理 【强制】 不要在 foreach 循环里进行元素的 remove / add 操作。remove 元素请使用 iterator 方式,如果并发操作,需要对 iterator 对象加锁。// 正例: List<String> list = new ArrayList<>(...

IOS safari 播放 mp4 遇到的坎儿

起因 事情的起因是调试 IOS 手机下播放服务器接口返回的 mp4 文件流失败。对于没调试过移动端和 Safari 的我来说着实费了些功夫&#xff0c;网上和AI也没有讲明白。好在最终大概理清楚了&#xff0c;在这里整理出来供有缘人参考。 问题 因为直接用 IOS 手机的浏览器打开页面…...

plsql :用户system通过sysdba连接数据库--报错ora-01031

一、winR cmd通过命令窗口登录sys用户 sql sys/[password]//localhost:1521/[service_name] as sysdba二、输入用户名:sys as sysdba 三、输入密码:自己设的 四、执行grant sysdba to system; 再去PL/SQL连接就可以了...

LabVIEW条件配置对话框

条件配置对话框&#xff08;Configure Condition Dialog Box&#xff09; 要求&#xff1a;Base Development System 当右键单击**条件禁用结构&#xff08;Conditional Disable Structure&#xff09;**并选择以下选项时&#xff0c;会显示此对话框&#xff1a; Add Subdiagr…...

PyAudio库基本知识详解——为自制PCM音频播放器做准备

前言 结合前段时间我们做的音频编解码器&#xff0c;这样我们就可以将获取到的ADPCM数据&#xff0c;转换成PCM数据&#xff0c;然后播放出来&#xff0c;得到一个完整的音频数据&#xff0c;因此&#xff0c;接下来几篇文章中&#xff0c;我们想做一个播放PCM格式的音频播放器…...

Git如何添加子仓库

背景 项目中经常使用别人维护的模块&#xff0c;在git中使用子模块的功能能够大大提高开发效率。 使用子模块后&#xff0c;不必负责子模块的维护&#xff0c;只需要在必要的时候同步更新子模块即可。 本文主要讲解子模块相关的基础命令&#xff0c;详细使用请参考main page…...

001__VMware软件和ubuntu系统安装(镜像)

[ 基本难度系数 ]:★☆☆☆☆ 一、Vmware软件和Ubuntu系统说明&#xff1a; a、Vmware软件的说明&#xff1a; 官网&#xff1a; 历史版本&#xff1a; 如何下载&#xff1f; b、Ubuntu系统的说明&#xff1a; 4、linux系统的其他版本&#xff1a;红旗(redhat)、dibian、cent…...

在国产电脑上运行PDFSAM软件使用pdf分割合并交替混合处理pdf文档

软件下载地址: https://sourceforge.net/projects/pdfsam/files/ 需要注意事项&#xff0c;系统需要java环境&#xff0c;确认系统有java环境&#xff0c;根据软件版本需求安装对应的java运行环境。 下载pdfsam-4.3.4-linux.tar.gz安装包&#xff0c;解压&#xff0c;将runt…...

STM32完全学习——FATFS0.15移植SD卡

一、下载FATFS源码 大家都知道使用CubMAX可以很快的将&#xff0c;FATFS文件管理系统移植到单片机上&#xff0c;但是别的芯片没有这么好用的工具&#xff0c;就需要自己从官网下载源码进行移植。我们首先解决SD卡的驱动问题&#xff0c;然后再移植FATFS文件管理系统。 二、SD…...

Linux -- 生产消费模型之环形队列、信号量

目录 前言 环形队列 如何用环形队列实现生产消费模型&#xff1f; 信号量 sem_t sem_init&#xff08;初始化信号量&#xff09; sem_destroy&#xff08;销毁信号量&#xff09; 什么是PV操作&#xff1f; sem_wait&#xff08;P操作&#xff0c;减少信号量&#xff…...

Ashy的考研游记

文章目录 摘要12.1112.2012.21 DAY1&#xff08;政治/英语&#xff09;政治英语 12.22 DAY2&#xff08;数学/专业课&#xff09;数学专业课 结束估分 摘要 在24年的12月里&#xff0c;Ashy完成了他的考研冲刺&#xff0c;顺利的结束了他本年度的考研之旅。 在十二月里&#…...

MySQL线上事故:使用`WHERE`条件`!=xxx`无法查询到NULL数据

前言 在一次 MySQL 的线上查询操作中&#xff0c;因为 ! 的特性导致未能正确查询到为 NULL 的数据&#xff0c;险些引发严重后果。本文将详细解析 NULL 在 SQL 中的行为&#xff0c;如何避免类似问题&#xff0c;并提供实际操作建议。 1. 为什么NULL会查询不到&#xff1f; 在…...

vue3学习笔记(11)-组件通信

1.props 父传子 子传夫 父传子 接收用defineProps([]) 空字符串也是假 2.自定义事件 $event:事件对象 ref定义的数据在模板里面引用的时候可以不用.value 3.子传父 宏函数 触发事件 声明事件 defineEmits() 挂载之后3s钟触发 4.命名 肉串命名 5.任意组件通信 mitt pubs…...

【PDF物流单据提取明细】批量PDF提取多个区域内容导出表格或用区域内容对文件改名,批量提取PDF物流单据单号及明细导出表格并改名的技术难点及小节

相关阅读及下载&#xff1a; PDF电子物流单据&#xff1a; 批量PDF提取多个区域局部内容重命名PDF或者将PDF多个局部内容导出表格&#xff0c;具体使用步骤教程和实际应用场景的说明演示https://mp.weixin.qq.com/s/uCvqHAzKglfr40YPO_SyNg?token720634989&langzh_CN扫描…...

张量与数据类型

Pytorch最基本的操作对象——张量&#xff08;tensor&#xff09;&#xff0c;张量是Pytorch中重要的数据结构&#xff0c;可认为是一个高维数组。一般的&#xff0c;标量&#xff08;scalar&#xff09;是只有大小没有方向的量&#xff0c;如1、2、3等&#xff1b;向量&#x…...

torchvision.utils.make_grid 解释下

torchvision.utils.make_grid 是 PyTorch 中 torchvision 库提供的一个实用函数,用于将多个图像拼接成一个网格,方便进行可视化。 主要功能 make_grid 将一批图片组织成一个网格形式,输出一个单一的张量,便于使用可视化工具(如 Matplotlib)查看图像。 参数解释 torchvi…...

Android原生Widget使用步骤

需要创建三个XML文件以及一个Class文件 三个XML文件分别是 Widget布局文件 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_p…...

实验八 指针2

7-1 利用指针返回多个函数值 分数 30 全屏浏览 切换布局 作者 陈晓梅 单位 广东外语外贸大学 读入n个整数&#xff0c;调用max_min()函数求这n个数中的最大值和最小值。 输入格式: 输入有两行&#xff1a; 第一行是n值&#xff1b; 第二行是n个数。 输出格式: 输出最大…...

1 数据库(下):多表设计 、多表查询 + SQL中的with查询语法(MySQL8.0以后版本才支持这种新语法)+ 数据库优化(索引优化)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、多表设计1 多表设计-概述2 三种多表关系一对多&#xff08;多对一&#xff09;&#xff08;1&#xff09;无外键约束&#xff08;逻辑外键&#xff09;&…...

深圳 SEO 关键词推广的常见方法有哪些_深圳 SEO 关键词推广与竞价排名有何不同

深圳 SEO 关键词推广的常见方法有哪些 在数字化营销的时代&#xff0c;深圳 SEO 关键词推广已经成为企业提升网站曝光率和吸引潜在客户的重要手段。究竟有哪些常见的深圳 SEO 关键词推广方法呢&#xff1f;本文将详细探讨这些方法&#xff0c;帮助你更好地理解和实践深圳 SEO …...

AI Agent 时代的分布式闭源众创 AI Coding 云编程平台 (CSCD) 实现原理与生产应用

AI Agent 时代的分布式闭源众创 AI Coding 云编程平台 (CSCD) 实现原理与生产应用 文章目录 AI Agent 时代的分布式闭源众创 AI Coding 云编程平台 (CSCD) 实现原理与生产应用 第 1 章 AI Agent 时代与 CSCD 平台概述 1.1 AI Agent 时代的到来 1.1.1 从传统编程到 AI 辅助编程的…...

解放加密音乐:ncmdump的格式转换革新

解放加密音乐&#xff1a;ncmdump的格式转换革新 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 一、价值定位&#xff1a;破解NCM格式限制的技术方案 ncmdump作为一款开源工具&#xff0c;专为破解网易云音乐NCM加密格式而设计&am…...

SecGPT-14B知识库增强:让OpenClaw安全决策更精准

SecGPT-14B知识库增强&#xff1a;让OpenClaw安全决策更精准 1. 为什么需要知识库增强的OpenClaw 去年我在尝试用OpenClaw自动化处理安全日志时&#xff0c;发现一个尴尬的问题&#xff1a;当模型遇到CVE漏洞编号时&#xff0c;经常给出模棱两可的判断。比如看到"CVE-20…...

别再傻傻分不清!一张图看懂PMOS、NMOS和CMOS在电路设计中的真实区别

从物理特性到电路设计&#xff1a;PMOS、NMOS与CMOS的实战解析 在电子工程领域&#xff0c;MOSFET晶体管就像乐高积木一样构成了现代集成电路的基础模块。但面对PMOS、NMOS这对"双胞胎"时&#xff0c;许多初学者常常陷入困惑——为什么数字电路总爱用CMOS结构&#x…...

【数字信号检测】基于迫零算法大规模MIMO低复杂度信号检测附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f447; 关注我领取海量matlab电子书和数学建模资料&#x1f34a;个人信条&#xff1a;格物致知,完整Matl…...

从面包板到开发板:51单片机(STC89C52)点灯避坑指南与硬件连接实战

从面包板到开发板&#xff1a;51单片机(STC89C52)点灯避坑指南与硬件连接实战 当你第一次拿到STC89C52单片机芯片和一堆零散的元器件时&#xff0c;那种既兴奋又迷茫的感觉我至今记忆犹新。与直接使用现成的开发板不同&#xff0c;从零开始搭建最小系统并点亮第一个LED&#xf…...

Go语言的Web框架:从Gin到Echo

Go语言的Web框架&#xff1a;从Gin到Echo 1. 引言 Web框架是现代Web应用开发的重要工具&#xff0c;它提供了路由、中间件、参数处理等功能&#xff0c;大大简化了Web应用的开发过程。Go语言作为一种高效、简洁的编程语言&#xff0c;拥有丰富的Web框架生态。本文将介绍Go语言…...

Zotero Duplicates Merger:5分钟实现文献库高效整理的终极指南

Zotero Duplicates Merger&#xff1a;5分钟实现文献库高效整理的终极指南 【免费下载链接】ZoteroDuplicatesMerger A zotero plugin to automatically merge duplicate items 项目地址: https://gitcode.com/gh_mirrors/zo/ZoteroDuplicatesMerger 还在为学术文献库中…...

PlugY:重新定义暗黑破坏神2单机体验的技术突破

PlugY&#xff1a;重新定义暗黑破坏神2单机体验的技术突破 【免费下载链接】PlugY PlugY, The Survival Kit - Plug-in for Diablo II Lord of Destruction 项目地址: https://gitcode.com/gh_mirrors/pl/PlugY 暗黑破坏神2作为ARPG游戏的里程碑之作&#xff0c;其单机模…...