explicit关键字【C++】

news/2024/11/29 6:29:20/文章来源:https://www.cnblogs.com/whiteink/p/18570229

image

explicit关键字【C++】

用来修饰只有一个参数的类构造函数,以表明该构造函数是显式的,而非隐式的
禁止类对象之间的隐式转换,以及禁止隐式调用拷贝构造函数

隐式类型转换

int i = 1;
double d = i;

d被i赋值时
【编译器会做】
在中间产生一个临时变量
再通过这个临时对象进行拷贝构造给d

构造函数具有类型转换的作用

class Date
{
public:
// 构造函数Date(int year):_year(year)    // 初始化列表{}private:int _year;int _month = 3;int _day = 31;
};
int main()
{// d1 和 d2 都会调用构造函数Date d1(2022);Date d2 = 2023;return 0;
}

Date d2 = 2023;发生了隐式类型转换
image

如果做引用
Date& d3 = 2024;报错
image
原因:d3是一个Date类型,2024则是一个内置类型的数据

const Date d2 = 2023;可正常运行传值
原因:临时变量具有常性,它就是通过Date类的构造函数构造出来的,同类型之间可以做引用

explicit的作用:【禁止类型转换】

对于可读性不是很好的代码,可以使用explicit修饰构造函数,将会禁止构造函数的隐式转换,禁止隐式调用拷贝构造函数

只在类的构造函数前进行修饰

explicit Date(int year):_year(year)
{}

const Date d2 = 2023;会报错

多参情况

Date(int year, int month ,int day = 31):_year(year),_month(month),_day(day)
{}

这两种都可正常调用
Date d2 = { 2023, 3 };
const Date& d3 = { 2024, 4 };

若加入explicit

explicit Date(int year, int month ,int day = 31):_year(year),_month(month),_day(day)
{}

则不可正常调用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/841655.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快手观看时长建模:CREAD

将观看时长作为连续值预测,会带来“回归问题”,即会放大对异常值和潜在预测偏差的敏感性,常见的一种方法是把时长分段转为分类问题来预估,CREAD正是提出了一种回归转分类的处理方法。 CREAD的流程如下图所示,把观看时长分为M个桶,在每个桶内预估 P(y>t|x)的概率 经过推…

.NET9 EFcore支持早期MSSQL数据库 ROW_NUMBER()分页

前言 NET程序员是很幸福的,MS在上个月发布了NET9.0RTM,带来了不少的新特性,但是呢,我们是不是还有很多同学软硬件都还没更上,比如,自己的电脑还在跑Win7,公司服务器还在跑MSSQL2005-2008的! 这不就引入了我们本文要探索的问题,因为MS早在EFcore3.1后就不再内置支持ROW_NUMBER()…

hhdb数据库介绍(9-8)

高可用服务 计算节点负载均衡 HHDB Server支持多计算节点集群的节点自治。以下简称计算节点集群中Primary状态的计算节点为Primary计算节点;计算节点集群中Secondary状态的计算节点为Secondary计算节点。Primary和Secondary计算节点的数据服务完全对等,均支持所有类型的数据操…

Nuxt.js 应用中的 webpack:done 事件钩子

title: Nuxt.js 应用中的 webpack:done 事件钩子 date: 2024/11/26 updated: 2024/11/26 author: cmdragon excerpt: webpack:done 钩子用于处理 Webpack 编译完成后的逻辑。在 Webpack 编译的所有任务完成后,这个钩子会被调用,通常用于通知开发者编译的状态、执行清理工作…

ChatGPT的应用场景:开启无限可能的大门

ChatGPT的应用场景:开启无限可能的大门 随着人工智能技术的快速发展,自然语言处理领域迎来了前所未有的突破。其中,ChatGPT作为一款基于Transformer架构的语言模型,凭借其强大的语言理解和生成能力,在多个行业和场景中展现出了广泛的应用潜力。以下是ChatGPT八个最具代表性…

宝塔多PHP环境中如何切换composer的php环境

1.发现问题 宝塔上有php7.3与7.4两个版本;系统的默认执行命令是php7.3版本;目标项目环境是7.4;执行composer下载时,提示需要php环境版本为7.4; 2.解决问题宝塔上:网站》高级设置》PHP命令行版本 可以直接修改命令行版本;解决!!!!

时序数据库tdengine部署说明

TDengine 是一款开源、高性能、云原生的时序数据库(Time Series Database, TSDB)。 参考文档: https://docs.taosdata.com/目录单节点部署docker-compose启动连接测试集群部署集群规划部署过程初始化配置文件设置firstEp启动集群验证添加管理节点冗余nginx负载均衡部署 单节点…

GaussDB数据类型介绍

@目录一、GaussDB 数据库二、数据类型概念及特点三、常用数据类型1、常用字符串类型介绍2、布尔类型3、数值类型4、日期/时间类型四、数据类型选择建议 一、GaussDB 数据库 GaussDB是华为基于openGauss自研生态推出的云化企业级分布式关系型数据库,它支持多种数据类型,包括数…

Rookie Mistake pg walkthrough Intermediate

nmap ┌──(root㉿kali)-[~/lab] └─# nmap -p- -A 192.168.189.221 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-26 00:11 UTC Stats: 0:01:03 elapsed; 0 hosts completed (1 up), 1 undergoing Service Scan Service scan Timing: About 50.00% done; ETC: 00…

看不懂来打我,Vue3的watch是如何实现监听的?KN

合集 - vue3源码(5)1.Vue3.5新增的baseWatch让watch函数和Vue组件彻底分手08-262.Vue3.5中解构props,让父子组件通信更加丝滑09-183.让性能提升56%的Vue3.5响应式重构之“版本计数”11-064.揭秘!Vue3.5响应式重构如何让内存占用减少56%11-135.看不懂来打我,Vue3的watch是如何…

python将Xmind用例转为Excel用例

代码:# coding=utf-8 import xlwtfrom past.builtins import raw_inputfrom xmindparser import xmind_to_dictdef resolvePath(dict, lists, title): # title去除首尾空格 title = title.strip() # 如果title是空字符串,则直接获取value if len(title) == 0: …

测试图床

测试图床 成新的阿斯顿发a 四谛法洞标准 撑场 达到​​ ‍