C++中explicit关键字怎么用
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章给大家分享的是有关C++中explicit关键字怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1 隐式转换C++ 构造函数默认类型为implicit,定义时既
千家信息网最后更新 2026年11月03日C++中explicit关键字怎么用
这篇文章给大家分享的是有关C++中explicit关键字怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
1 隐式转换
C++ 构造函数默认类型为implicit,定义时既可以显示说明也可以默认不加该标识符。
// 没有使用explicit关键字的类声明, 即默认为隐式声明 class CString{ private: char *m_pStr; int m_iSize; public: CxString(int size){ m_iSize = size; m_pStr = malloc(m_iSize + 1); memset(m_pStr, 0, m_iSize + 1); } CxString(const char *p) { int size = strlen(p); m_pStr = malloc(size + 1); strcpy(m_pStr, p); m_iSize = strlen(m_pStr); } ~ CxString(){ if(m_pStr) { delete m_pStr; m_pStr = nullptr; } }};如上的代码中在实例化类的对象时以下方法都是正确的。
如下所示:
CString str1("12121");//CxString(const char *p) CString str2="abc";//CxString(const char *p)CString str4(4);//CxString(int size) CString str5=6;//CxString(int size)上面的使用方式都会默认调用相应的构造函数实现对象的初始化,以CString str5=6为例,在对对象进行实例化的过程中主要进行了如下操作:
CString string5(6); //或者如下所示 CString temp(6); CString string5 = temp;
2 显示转换
在构造函数上使用了explicit关键字后,通过构造函数进行对象实例化时需要进行显示类型转化。否则将会报错。
依旧以上面的代码为例:
class CString{ private: char *m_pStr; int m_iSize; public: explicit CString(int size) { m_iSize = size; m_pStr = (char *)malloc(m_iSize + 1); memset(m_pStr, 0, m_iSize + 1); } explicit CString(const char *p){ int size = strlen(p); m_pStr = (char *)malloc(size + 1); strcpy(m_pStr, p); m_iSize = strlen(m_pStr); }};如上:再次使用相同得到方式对类进行实例化时将会报错,报错内容如下:

通过运行结果可以说明:explicit关键字可以防止构造函数进行隐式自动转换
3 再次拆解
explicit关键字只对构造函数有一个参数的形式有效,如果构造函数有多个参数时explicit的功能也将失效,但是C++也提供了一种例外,既如果构造函数的其他参数都有默认值及时参数个数大于1个explicit也是生效的。
如下面的代码所示:
class CPoint{ private: float m_fX; float m_fY; public: explicit CPoint(float x,float y=9.8):m_fX(x),m_fY(y) { } }; int main(){ CPoint point1(2,3); CPoint point2=4.5; return 0;}如代码所示,编译时将会报错,报错内容为:

如果要解决上面的问题可以用下面得到方法:
按照显示类型转换的方式进行处理,如:
CPoint point1(2,3);CPoint point2(4.5);
将explicit关键字去掉,允许构造函数进行隐式转换数据类型,如:
CPoint(float x,float y=9.8):m_fX(x),m_fY(y) { }感谢各位的阅读!关于"C++中explicit关键字怎么用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
函数
关键
关键字
C++
代码
内容
参数
实例
对象
类型
面的
方式
会报
再次
如上
方法
更多
篇文章
不错
实用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
今日互联网科技
金融科技创新监管互联网金融
北京互联网科技公司
智网互联网科技
朗涯互联网科技
互联网科技ppt模板
顺玮阁互联网科技
上海亿帐通互联网科技
互联网科技股有哪些
甘肃拓世互联网科技有限公司
华服互联网科技官网
南平创想时代互联网科技有限公司
厦门千工互联网科技有限公司
新兴科技互联网创新大赛颁奖典礼
长沙互联网科技
上海钢联属于互联网科技股吗
互联网科技资金流入
互联网领先科技宣传片
济南小医互联网科技有限公司招聘
互联网金融金融科技
广州淘业互联网络科技
互联网科技产业
科技和互联网公司
嘟嘟瓜互联网科技
互联网科技论文
互联网科技热点资讯
乌苏新华互联网科技做什么的
互联网科技和法律行业
科技赋能视角下互联网保险发展
山东星卡互联网科技有限公司官网