首先, 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关键字也就无效了.

最新文章

  1. Js replace() 学习笔记
  2. ACM/ICPC 之 数论-斐波拉契●卢卡斯数列(HNNUOJ 11589)
  3. update 多表
  4. JNDI全面总结(zz)
  5. check whether the crystal report runtime is exists 检查crystalreport运行时是否存在
  6. 垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
  7. Vue 2.0基础
  8. COJ 0967 WZJ的数据结构(负三十三)
  9. python学习day4
  10. 蓝桥杯-打印大X-java
  11. javascipt继承机制(from阮一峰)
  12. 容器虚拟网卡与网桥docker0虚拟网卡的veth pair的配对
  13. Java内存溢出优化性能优化
  14. inline-block的理解
  15. 第一册:lesson seventy five。
  16. jQuery——检测滚动条是否到达底部
  17. GlusterFs卷的简单操作
  18. AES加解密算法
  19. springboot+cloud 学习(一)高可用服务注册中心(Eureka)
  20. linux学习记录.5.git & github

热门文章

  1. 关于model,modelsmanager,db以及phql之间关系的梳理
  2. 【云原生 · Kubernetes】runtime组件
  3. i春秋时间
  4. c++题目:切香肠
  5. Visual Studio高版本 ArcObject for .Net 低版本
  6. 【开发必备】单点登录,清除了cookie,页面还保持登录状态?
  7. Spring Boot+Mybatis:实现数据库登录注册与两种properties配置参数读取
  8. 2.6:Python数据存取-文件、文件夹及目录、数据库
  9. 【Java SE进阶】Day06 线程、同步
  10. Appium工具