C++提供了关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生。声明为explicit的构造函数不能在隐式转换中使用。

C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色。 1 是个构造器 ,2 是个默认且隐含的类型转换操作符。
所以, 有时候在我们写下如 AAA = XXX, 这样的代码, 且恰好XXX的类型正好是AAA单参数构造器的参数类型, 这时候编译器就自动调用这个构造器, 创建一个AAA的对象。
这样看起来好象很酷, 很方便。 但在某些情况下(见下面权威的例子), 却违背了我们(程序员)的本意。 这时候就要在这个构造器前面加上explicit修饰, 指定这个构造器只能被明确的调用,使用, 不能作为类型转换操作符被隐含的使用。 呵呵, 看来还是光明正大些比较好。
explicit构造函数的作用
解析:
explicit构造函数是用来防止隐式转换的。请看下面的代码:
class Test1
{
public:Test1(int n){num=n;}//普通构造函数
private:int num;
};
class Test2
{
public:explicit Test2(int n){num=n;}//explicit(显式)构造函数
private:int num;
};
int main()
{Test1 t1=12;//隐式调用其构造函数,成功Test2 t2=12;//编译错误,不能隐式调用其构造函数Test2 t2(12);//显式调用成功return 0;
}
Test1的构造函数带一个int型的参数,代码23行会隐式转换成调用Test1的这个构造函数。而Test2的构造函数被声明为explicit(显式),这表示不能通过隐式转换来调用这个构造函数,因此代码24行会出现编译错误。
普通构造函数能够被隐式调用。而explicit构造函数只能被显式调用。

C++ 中explicit的使用相关推荐

  1. C++中explicit关键字的作用

    C++中explicit关键字的作用 explicit用来防止由构造函数定义的隐式转换. 要明白它的作用,首先要了解隐式转换:可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换. ...

  2. C++中explicit关键字用法

    在C++类的实例化过程中,存在一种隐式转换,即可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换. 一个简单的例子: #include <iostream> #incl ...

  3. C++ 中explicit的作用及用法(虽然简单,但是还是有用的)

    目录 C++explicit(官网的说法) explicit specifier C++explicit 清楚的说法(建议英文不好的从这里开始食用哦) explicit作用: explicit使用注意 ...

  4. C++ 中explicit关键字详解

    展开 explicit关键字的作用 使用情况 类型转换函数 单操作数构造函数 同时出现拷贝构造函数和类型转换函数 拷贝构造函数 总结 参考文献 explicit关键字的作用 explicit关键字在写 ...

  5. C++中explicit的用法

    C++提供了关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生,声明为explicit的构造函数不能在隐式转换中使用. C++中, 一个参数的构造函数(或者除了第一个参数 ...

  6. C++中explicit关键字的使用

    1.explicit函数介绍 作用:explicit构造函数是用来防止隐式转换的 实例1如下: #include <iostream>using namespace std;// expl ...

  7. 【转】认识 C++ 中的 explicit 关键字

    C++ 中 explicit 关键字的作用 在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换. explicit使 ...

  8. QT5中实现多窗口切换,并从子窗口返回数据

    该程序的功能:主窗口里有两个button和ltextEdit,按下下一页button后弹出子窗口并隐藏主窗口,按下退出Button后退出程序.子窗口有文本框lineEdit和button,按下子窗口的 ...

  9. C++explicit关键字

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105089138 C ...

最新文章

  1. zoj——3556 How Many Sets I
  2. 检索数据表中重复的记录
  3. Linux 关于动态链接库以及静态链接库的一些概念
  4. [树状数组] Inverse
  5. arthas 排查内存溢出_小学妹问我:如何利用可视化工具排查问题?
  6. OpenCV LATCH Matching描述符匹配算法的实例(附完整代码)
  7. uva 1347——Tour
  8. Qt使用invokeMethod反射机制实现进程间的通信
  9. html四边形的的框怎么编写,html知识点之利用css四边形切角并且加上边框
  10. 个基于TensorFlow的简单故事生成案例:带你了解LSTM
  11. 苏宁MOCK测试桩服务建设实践
  12. linux shell学习四
  13. 0-1背包问题——回溯法求解
  14. TCP/IP报文详解
  15. arm-linux-gcc踩坑1
  16. 39.安装PH5\PH7
  17. mount –o remount,rw /
  18. 19款探岳刷隐藏教程_19款探岳怎么选,小编在此支你几招 拿起小本本记住了
  19. plot_route(pos_r); matlab,蚁群算法 matlab程序(已运行) - lyp2003ok的专栏 - CSDN博客
  20. 手游创业是新的风口吗

热门文章

  1. 让行内元素(如图片)在div中水平垂直居中 (干货)
  2. 数据可视化(BI报表的开发)第三天
  3. [转]矩阵分解在推荐系统中的应用
  4. 一个医院院长电视机坏了,拿到一个大修理店去修
  5. 【初赛】概率与期望学习笔记
  6. 【K8S学习笔记】Part1:使用端口转发访问集群内的应用
  7. 防止cpu 一直被占用 sleep(0) 和 yield
  8. MyBatis 事务源码分析
  9. 未能加载文件或程序集“Poderosa.Core
  10. 状态开关(ToggleButton)