博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【C++】隐式类型转换和 explicit关键字
阅读量:5155 次
发布时间:2019-06-13

本文共 580 字,大约阅读时间需要 1 分钟。

来自:黄邦勇帅

1. 当类中带有一个参数的构造函数时,将执形对象的隐式转换,比如有类 A,有一个带有一个参数的构造函数A(int i){}则当出现语句A m=1;就会调用带有一个参数的构造函数来创建对象m,也就是将语句转换为A m(1)的形式。

2. 如果有一个函数,比如 void f(A j){}这个函数需要一个类A 的对象作为参数,但是当调用语句为f(2)时,同样能调用这个函数,这时函数的形 参A j 被解释为,A j=2 即会隐式调用带有一个参数的构造函数来创建一个对象j。

但是有一种形式的函数定义当出现语句 f(2)这样的调用时会出错,就是函数 f 定义的形式为 void f(A &j){}定义一个接受一个实参的引用时会出错,具体原因不清楚。但这几种情况都能正确调用void f(A j){},void f(const A j){};void f(constA & j){}。

3. 如果不需要这种隐式的类型转换则在构造函数前使用关见字 explicit,这个关见字只能用于构造函数前。如果在构造函数前使用explicit 关见字,这时语句 A m=1 和 f(2)都将出错。

 

4.声明为explicit的构造函数不能在隐式转换中使用。

转载于:https://www.cnblogs.com/dplearning/p/4783637.html

你可能感兴趣的文章
矩阵快速幂---BestCoder Round#8 1002
查看>>
js兼容公用方法
查看>>
如何将应用完美迁移至Android P版本
查看>>
【转】清空mysql一个库中的所有表的数据
查看>>
基于wxPython的python代码统计工具
查看>>
淘宝JAVA中间件Diamond详解(一)---简介&快速使用
查看>>
Hadoop HBase概念学习系列之HBase里的宽表设计概念(表设计)(二十七)
查看>>
Kettle学习系列之Kettle能做什么?(三)
查看>>
Day03:Selenium,BeautifulSoup4
查看>>
awk变量
查看>>
mysql_对于DQL 的简单举例
查看>>
35. Search Insert Position(C++)
查看>>
[毕业生的商业软件开发之路]C#异常处理
查看>>
一些php文件函数
查看>>
有关快速幂取模
查看>>
Linux运维必备工具
查看>>
字符串的查找删除
查看>>
NOI2018垫底记
查看>>
快速切题 poj 1002 487-3279 按规则处理 模拟 难度:0
查看>>
Codeforces Round #277 (Div. 2)
查看>>