C++ explicit关键字的作用主要是用来修饰类的构造函数,表明该构造函数是显式的,禁止单参数构造函数的隐式转换。

如果C++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示:

class MyClass

{

public:

  MyClass(int num);

}

MyClass obj = 10; //ok, convert int to MyClass

上面的代码中编译器自动将整型转换为MyClass类对象,实际上等同于下面的操作:

MyClass temp(10);

MyClass obj = temp;

上面的所有的操作即是所谓的“隐式转换”。

如果要避免这种自动转换的功能,可以在声明构造函数的时候前面添加上explict关键字,将类的构造函数声明为“显示”,这样就可以防止这种自动的转换操作。

修改上面的MyClass类的构造函数为显示的,下面的代码将不能够编译通过,如下所示:

class MyClass

{

public:

  explicit MyClass(int num);

}

38.C++修饰构造函数的explicit关键字相关推荐

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

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

  2. C++ explicit关键字详解(用于构造函数)

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

  3. C++的拷贝构造函数、operator=运算符重载,深拷贝和浅拷贝、explicit关键字

    1.在C++编码过程中,类的创建十分频繁. 简单的功能,当然不用考虑太多,但是从进一步深刻理解C++的内涵,类的结构和用法,编写更好的代码的角度去考虑,我们就需要用到标题所提到的这些内容. 最近,在看 ...

  4. c++ explicit 修饰构造函数

    按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示: class String { String ( const char* p ); ...

  5. 3-6:类与对象下篇——构造函数中的初始化列表、匿名对象和explicit关键字

    文章目录 (1)真的是初始化吗 (2)初始化列表 A:概述 B:哪些成员必须在初始化列表进行初始化 (3)注意 (4)匿名对象 (5)explicit关键字 (1)真的是初始化吗 前文中,我们使用构造 ...

  6. C++构造函数中冒号作用及explicit关键字

    构造函数中冒号作用,类给成员变量赋值,更适用于成员变量的常量const型. class myClass {/*构造函数中冒号作用,类给成员变量赋值,更适用于成员变量的常量const型.*/ publi ...

  7. 【C++】explicit关键字

    explicit的优点是可以避免不合时宜的类型变换,缺点无.所以google约定所有单参数的构造函数都必须是显式的** explicit关键字只需用于类内的单参数构造函数前面.由于无参数的构造函数和多 ...

  8. C++中的explicit关键字介绍

    C++中的关键字explicit主要是用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换.类构造函数默认情况下声明为隐式的即implicit. 隐式转 ...

  9. C++ explicit关键字详解(转载)

    转载:https://www.cnblogs.com/ymy124/p/3632634.html 首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函 ...

最新文章

  1. iOS 设置所有UIButton的ExclusiveTouch属性为YES
  2. 《Python知识手册》,高清pdf免费获取
  3. 物理竞赛得奖学计算机,物理竞赛林紫琪带你探索清华学堂计算机科学实验班”(姚班)...
  4. win10用Eclipse+OpenJTag对S3C2440开发板进行动态调试
  5. tomcat jsvc java_opts_Tomcat 学习笔记(2) - 使用 jsvc 启动tomcat
  6. 干什么事都要先定位,再聚焦
  7. 基于微信小程序的人脸识别
  8. 拼多多无货源一件代发怎么做,这些细节要知道
  9. 几款好用的敏捷开发工具
  10. 隐藏CNZZ统计图标的
  11. 未能解析主引用“Fiddler”,因为它是针对“.NETFramework,Version=v4.6.1”框架生成的。该框架版本高于当前目标框架“.NETFramework,Version=v4.5
  12. 给一个大表增加一个字段,带默认值
  13. 【声纹识别】 EER
  14. FPGA到底是什么?
  15. javaweb项目发送邮件自定义发件人名称(javamail)
  16. eclipse代码检查工具-FindBugs介绍
  17. javaweb面试问题大全及答案大全,真的太香了!
  18. ananconda离线安装.tar.bz2包
  19. 不要学计算机,学IT的我已经后悔了
  20. DatePicker 日期控件,禁止选择当前之前(之后)时间

热门文章

  1. Unity3D之预设
  2. linux中源码编译安装mysql常见错误
  3. linux下bochs启动黑屏解决办法
  4. Solaris下调整opt分区的inode结构
  5. Matlab——数值计算——单个代数方程 代数方程组
  6. ffmpeg支持G711音频和H.264视频数据封装为mp4
  7. TCP如何能正常关闭连接?
  8. linux命令之添加系统搜索动态库目录-ldconfig
  9. linux efi不要boot目录,LINUX下EFIBOOTMGR的使用,删除UEFI主板多余启动项和添加启动项-Go语言中文社区...
  10. 超出网络bios会话限制_?老旧BIOS说再见,拯救者系列设置超简单