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

C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色。

1 是个构造;2 是个默认且隐含的类型转换操作符。

所以, 有时候在我们写下如 AAA = XXX, 这样的代码, 且恰好XXX的类型正好是AAA单参数构造器的参数类型, 这时候编译器就自动调用这个构造器, 创建一个AAA的对象。

这样看起来好象很酷, 很方便。 但在某些情况下, 却违背了程序员的本意。 这时候就要在这个构造器前面加上explicit修饰, 指定这个构造器只能被明确的调用/使用, 不能作为类型转换操作符被隐含的使用。

解析:explicit构造函数是用来防止隐式转换的。请看下面的代码:

#include <iostream>
using namespace std;
class Test1
{
public :Test1(int num):n(num){}
private:int n;
};
class Test2
{
public :explicit Test2(int num):n(num){}
private:int n;
};int main()
{Test1 t1 = 12;Test2 t2(13);Test2 t3 = 14;return 0;
}

编译时,会指出 t3那一行error:无法从“int”转换为“Test2”。而t1却编译通过。注释掉t3那行,调试时,t1已被赋值成功。

注意:当类的声明和定义分别在两个文件中时,explicit只能写在在声明中,不能写在定义中。

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

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

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

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

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

  3. Numpy库中einsum函数用法

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

  4. explicit的用法

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. java服务器http post_使用Java程序通过http post访问ABAP Netweaver服务器
  2. html5 摆动的花朵,CSS3实现一个旋转的花朵
  3. 具有可执行Tomcat的独立Web应用程序
  4. linux 打包排除多个目录,tar打包整个目录(可排除子目录)几种方法
  5. hadoop MultipleInputs fails with ClassCastException (get fileName)
  6. 工作中你都遇到哪些不要脸的同事?
  7. Swift 可选(Optionals)类型
  8. useradd/adduser 添加用户
  9. JAVA最全最细基础知识点
  10. LCP3机器人大冒险
  11. 基于STM32使用TTP223点动触摸传感器模块
  12. wordpress install.php 500,安装WordPress出现500错误的解决办法 | Wopus
  13. 微课 展示 php 源码,PHP从零基础到项目实战(微课视频版)
  14. ROS三种通信方式之参数通信
  15. nginx参数sendfile
  16. 计算机视觉编程 第六章 图像聚类
  17. Alias Design 2019注册机
  18. java,NIO,UDP协议网络通信DEMO
  19. Cocoapods:podspec与使用过程中遇到的问题
  20. jmeter查看平均响应时间_Jmeter查看QPS和响应时间随着时间的变化曲线

热门文章

  1. 查询Active Directory
  2. Unity插件 - MeshEditor(三) 面片破碎网格破碎
  3. 刘首岐将演电影《谁的青春不叛逆》 叛逆少女转型成演员
  4. Flutter | flutter_flavor 的使用
  5. STM32F103利用定时器编程实现输出一路PWM波形
  6. android存储注册信息吗,Android私密开发信息存储
  7. 整天的胡思乱想怎么办
  8. 数字城市是城市发展的新的经济增长点
  9. 快速理解 VSync
  10. 五大税种,你知道多少?