explicit 是避免构造函数的参数自动转换为类对象的标识符

[cpp] view plain copy
  1. #include <iostream>
  2. using namespace  std;
  3. class A
  4. {
  5. public:
  6. explicit A(int a)
  7. {
  8. cout<<"创建类成功了!"<<endl;
  9. }
  10. };
  11. int main()
  12. {
  13. A a=10;
  14. return 0;
  15. }

上面的代码编译不成功,原因是当显式地定义了一个带一个参数的构造函数( 带explicit),必须要显示地调用构造函数,

A a(10);

如果不加 explicit的话

A a=10;

实际的转换过程如下:
相当于直接调用A(10);

(1)

explicit

此关键字只能对用户自己定义的对象起作用,不对默认构造函数起作用
此关键字只能够修饰构造函数。而且构造函数的参数只能有一个。。

(2)何时用explicit

当我们不希望自动类型转换的时候用,其实标准库好多构造函数都是explicit的

比如说vector <int> ivec(10);  //这种定义看起来一目了然

不能写成vector <int> ivec=10;//此种定义让程序员感到疑惑

(3)何时不用explicit

当我们需要隐式转换的时候

比如说String类的一个构造函数

String(const char*);

定义成这样的好处,在需要隐式转化的时候编译器会自动地帮我们转换,标准库里面的String就是一个好的证明。

具体来说:

我们可以这样String str="helloworld";//直接调用构造函数

String str="hello"+str+"world";

调用重载的+操作符号,此过程相当于:
String temp("hello"); //调用构造函数

String str=temp+str;

String t("world");//调用构造函数

String str=str+t;

明白隐式转换在我们自己写类的时候,尤其是些操纵内存的类的时候很有用。

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

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

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

  2. C++中explicit的用法

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

  3. python中sorted的用法append_Python中高阶函数sorted()用法

    在Python中,有内置的排序方法:sorted(iterable, key, reverse). Sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序.key指定的函数 ...

  4. Numpy库中einsum函数用法

    Numpy中einsum函数用法 一.一维张量收缩 二.二维张量收缩 2.1 收缩到零维张量 2.2 收缩到一维张量 三.三维张量收缩(重难点) 3.1 例1 3.2 例2 四.其他功能介绍(次要) ...

  5. explicit的用法

    explicit的用法 explicit关键字的作用是:禁止隐式调用类的单参数构造函数,主要禁用以下两种操作: 禁止隐式调用拷贝构造函数 禁止类对象之间的隐式转换 类对象之间的隐式转换是指利用一个已经 ...

  6. mysql中change用法,mysql 中alter的用法以及一些步骤

    mysql 中alter的用法以及一些方法 在用到alter的时间,查到了这个文章,就copy下来了,详细进入下面链接: MySQL之alter语句用法总结 1:删除列 ALTER TABLE [表名 ...

  7. mysql中正则表达式的用法_Mysql中正则表达式Regexp常见用法

    Mysql中Regexp常见用法 模糊匹配,包含特定字符串 # 查找content字段中包含"车友俱乐部"的记录 select * from club_content where ...

  8. 【C++】C/C++ 中 static 的用法全局变量与局部变量

    C/C++ 中 static 的用法全局变量与局部变量 目录 1. 什么是static? 1.1 static 的引入 1.2 静态数据的存储 2. 在 C/C++ 中static的作用 2.1 总的 ...

  9. php foreach嵌套foreach,php中foreach怎么嵌套foreach PHP中foreach函数用法?

    foreach的使用方法小编不是很明确,分享达人指教一下.foreach (array_expressforeach($array as $key) { if(xxxx) { break; //bre ...

  10. python中str的index什么意思_python中index的用法是什么

    index() 一般用处是在序列中检索参数并返回第一次出现的索引,没找到就会报错,比如:>>> t=tuple('Allen') >>> t ('A', 'l', ...

最新文章

  1. redis 通过aof日志恢复_Redis之-aof恢复
  2. SUSE11sp3 perf工具安装过程
  3. SAP UI5 应用开发教程之五十六 - SAP UI5 树控件(tree)的开发试读版
  4. linux 内核启动调试,内核开发和调试的启动时参数
  5. 【渝粤教育】国家开放大学2018年春季 0269-22T文学概论 参考试题
  6. 排序算法(三) —— 直接插入排序
  7. 域对抗网络Domain adversarial neural network及其应用相关论文
  8. openoffice 64_科学网—四棱的核桃:卡片机傻拍2020(64)
  9. Chatbot - NLP
  10. java创建容器对象的类是什么_spring容器创建bean对象的方式
  11. codereviw得到的一些经验
  12. 汽车故障诊断技术【8】
  13. C++ 逆波兰表达式
  14. PS无痕修改文字技巧
  15. 村田 - ESD 保护装置的基础知识
  16. 【C++基础知识】常成员函数,常引用
  17. 大力普及“他妈的”有助于语言交流
  18. 开发人员必备的13项技能
  19. 十九 Redis AOF持久化
  20. 独立思考的迷失很可怕!!!

热门文章

  1. 用计算机模拟实验技术路线,自然科学基金申请书模板
  2. 求一个任意实数的算术平方根的算法设计_感恩!面试必刷100道算法题
  3. qlineedit限制输入数字_请注意:输入设计需要这些交互反馈
  4. 由于计算机是中文名ccs软件安装出现错误_UG软件不会解决的二十个问题解决方法总结...
  5. 均线策略python代码_Python版商品期货多品种均线策略
  6. 数学建模算法与应用_CORDIC算法详解(三) CORDIC 算法之线性系统及其数学应用...
  7. java文件读取路径_java文件读取路径问与答
  8. php访问对象的成员,如何使用PHP从JSON访问另一个对象内的类的成员
  9. JAVA集合系列(4):关于数组复制的几种方法(源码解读)及执行效率,我们知多少?
  10. Linux学习笔记:wc查看文件字节数、字数、行数