C++笔记之关键字explicit
来源:互联网 发布:顺丰运单打印软件 编辑:程序博客网 时间:2024/05/17 16:55
在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。
explicit使用注意事项:
explicit 关键字只能用于类内部的构造函数声明上。
explicit 关键字作用于单个参数的构造函数。
隐式转换:直接将一种类型赋值给另外一个类型;
例如:string strType = “123”;
object objType=strType;//,隐式转换,
显示转换:数据先进行类型转换再进行赋值,
例如:string strType = “123”;
object objType=(object)strType;//,显式转换,
**例子:***转自:***
http://www.cnblogs.com/this-543273659/archive/2011/08/02/2124596.html
未加explicit时的隐式类型转换 1. class Circle 2. { 3. public: 4. Circle(double r) : R(r) {} 5. Circle(int x, int y = 0) : X(x), Y(y) {} 6. Circle(const Circle& c) : R(c.R), X(c.X), Y(c.Y) {} 7. private: 8. double R; 9. int X; 10. int Y; 11. }; 12. 13. int _tmain(int argc, _TCHAR* argv[]) 14. { 15. //发生隐式类型转换 16. //编译器会将它变成如下代码 17. //tmp = Circle(1.23) 18. //Circle A(tmp); 19. //tmp.~Circle(); 20. Circle A = 1.23; 21. //注意是int型的,调用的是Circle(int x, int y = 0) 22. //它虽然有2个参数,但后一个有默认值,任然能发生隐式转换 23. Circle B = 123; 24. //这个算隐式调用了拷贝构造函数 25. Circle C = A; 26. 27. return 0; 28. } 加了explicit关键字后,可防止以上隐式类型转换发生 1. class Circle 2. { 3. public: 4. explicit Circle(double r) : R(r) {} 5. explicit Circle(int x, int y = 0) : X(x), Y(y) {} 6. explicit Circle(const Circle& c) : R(c.R), X(c.X), Y(c.Y) {} 7. private: 8. double R; 9. int X; 10. int Y; 11. }; 12. 13. int _tmain(int argc, _TCHAR* argv[]) 14. { 15. //一下3句,都会报错 16. //Circle A = 1.23; 17. //Circle B = 123; 18. //Circle C = A; 19. 20. //只能用显示的方式调用了 21. //未给拷贝构造函数加explicit之前可以这样 22. Circle A = Circle(1.23); 23. Circle B = Circle(123); 24. Circle C = A; 25. 26. //给拷贝构造函数加了explicit后只能这样了 27. Circle A(1.23); 28. Circle B(123); 29. Circle C(A); 30. return 0; 31. } **
0 0
- C++笔记之关键字explicit
- C++:explicit 关键字
- C++explicit关键字
- 【C++】explicit关键字
- C++explicit关键字
- 【C++】explicit关键字
- 【C++】explicit关键字
- 【C++】explicit关键字
- C++关键字之explicit
- C++关键字之explicit
- c++关键字之explicit
- C++关键字之:explicit
- C++关键字之explicit
- C++关键字之explicit
- C++关键字之explicit
- C++学习笔记--explicit关键字
- C#学习笔记-explicit关键字
- C++——explicit关键字简析
- Python 简易网络爬虫的编写——抓取任意页面数目百度百科内容
- 响应的系统设置事件
- android自定义控件,动态设置Button的样式
- 【程序人生】:进入职场时该如何摒弃学生思维
- View 事件传递机制
- C++笔记之关键字explicit
- css动画效果回调处理
- I - 最少拦截系统——HOJ LCS
- 矩阵连乘
- Java中的抽象类与接口的特点和区别
- 什么是Grunt
- Glib学习(4) 哈希表 Hash Tables
- ORACLE中的自治事务
- 两点距离