C++ 关键字 explicit 的使用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++ 关键字 explicit 的使用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1517字,纯文字阅读大概需要3分钟。
内容图文
![C++ 关键字 explicit 的使用](/upload/InfoBanner/zyjiaocheng/637/d25b4e2dfa23477b9c2d0b87730705f4.jpg)
首先是定义:
explicit关键字只能修饰只有一个参数的构造函数,或者有多个参数,但是除第一个参数外其他的参数都有默认值的构造函数。它的作用是表明构造函数是显式方式显示的。(类构造函数默认为隐式)
如果类构造函数参数大于或等于两个时, 是不会产生隐式转换的, 所以explicit关键字也就无效了
举个例子:
class AMD{
public:
AMD(int level){ //这里的构造函数默认就是隐式声明
.....
}
.....
}
在这种情况下,如果运行以下语句:
AMD a(3);
AMD b=10;
这两种都是没有问题的,第二句 AMD b=10; 没有问题的原因是:
C++中, 如果的构造函数只有一个参数时, 那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象.
也就是说 AMD b=10 在实际执行时操作等同于以下语句:
AMD b(10);
//或者
AMD c(10);
AMD b = c;
虽然解释的通了,但是这种写法仍然是不友好的,毕竟 AMD b=10 这种写法看上去就像是将整数赋值给对象,显得不伦不类,而且在复杂代码中容易让人感到迷惑 -->所以现在就要使用到explicit关键字了
经过explicit修饰后:
class AMD{
public:
explicit AMD(int level){ //修饰后构造函数就是显式声明
.....
}
.....
}
此时,再去执行之前那两条语句,
AMD a(3);依旧是没什么问题,但是 AMD b=10 就不再可行了(explicit防止了类构造函数的隐式自动转换)
(此时编译就会出错)
依照explicit关键字的定义,它还可以修饰多个参数(其中只有一个没有缺省值)的构造函数:
class AMD{
public:
explicit AMD(int level,int size=0....){ //除了第一个参数都有缺省值
.....
}
.....
}
这种情况下explicit关键字也是起作用的,使用AMD b = 10 等会产生隐式类型转换的语句依旧会报错。
由于用explicit修饰的构造函数会避免 意料不到 的类型变换,而且没有什么缺点,所以一般情况下还是鼓励使用explicit的
内容总结
以上是互联网集市为您收集整理的C++ 关键字 explicit 的使用全部内容,希望文章能够帮你解决C++ 关键字 explicit 的使用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。