C++_关键字explicit
2024-09-08 18:18:29
首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).
class CxString // 没有使用explicit关键字的类声明, 即默认为隐式声明
{
public:
char *_pstr;
int _size;
CxString(int size)
{
_size = size; // string的预设大小
_pstr = malloc(size + 1); // 分配string的内存
memset(_pstr, 0, size + 1);
}
}
CxString string1(24); //是可以的
CxString string1 = 24; //是可以的
上面的代码中, "CxString string2 = 24;" 这句为什么是可以的呢? 在C++中, 如果的构造函数只有一个参数时, 那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象. 也就是说 "CxString string2 = 10;" 这段代码, 编译器自动将整型转换为CxString类对象, 实际上等同于CxString string1(24);
explicit关键字的作用就是防止类构造函数的隐式自动转换.
上面也已经说过了, explicit关键字只对有一个参数的类构造函数有效, 如果类构造函数参数大于或等于两个时, 是不会产生隐式转换的, 所以explicit关键字也就无效了.
最新文章
- Js replace() 学习笔记
- ACM/ICPC 之 数论-斐波拉契●卢卡斯数列(HNNUOJ 11589)
- update 多表
- JNDI全面总结(zz)
- check whether the crystal report runtime is exists 检查crystalreport运行时是否存在
- 垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
- Vue 2.0基础
- COJ 0967 WZJ的数据结构(负三十三)
- python学习day4
- 蓝桥杯-打印大X-java
- javascipt继承机制(from阮一峰)
- 容器虚拟网卡与网桥docker0虚拟网卡的veth pair的配对
- Java内存溢出优化性能优化
- inline-block的理解
- 第一册:lesson seventy five。
- jQuery——检测滚动条是否到达底部
- GlusterFs卷的简单操作
- AES加解密算法
- springboot+cloud 学习(一)高可用服务注册中心(Eureka)
- linux学习记录.5.git &; github
热门文章
- 关于model,modelsmanager,db以及phql之间关系的梳理
- 【云原生 · Kubernetes】runtime组件
- i春秋时间
- c++题目:切香肠
- Visual Studio高版本 ArcObject for .Net 低版本
- 【开发必备】单点登录,清除了cookie,页面还保持登录状态?
- Spring Boot+Mybatis:实现数据库登录注册与两种properties配置参数读取
- 2.6:Python数据存取-文件、文件夹及目录、数据库
- 【Java SE进阶】Day06 线程、同步
- Appium工具