C++ explicit的作用
explicit作用:
在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。
explicit使用注意事项:
*
explicit 关键字只能用于类内部的构造函数声明上。
*
explicit 关键字作用于单个参数的构造函数。
* 在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换
例子:
未加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. }
C++ explicit的作用的更多相关文章
- C++中关键字explicit的作用
C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色. 1 是个构造器 ,2 是个默认且隐含的类型转换操作符. 所以, 有时候在我们写下如 AAA ...
- [转]C++ explicit的作用
explicit作用: 在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换. explicit使用注意事项: * e ...
- C++ 中explicit的作用
转载:https://www.cnblogs.com/diligenceday/p/5781408.html C++ 中explicit的作用 explicit作用: 在C++中,explicit ...
- C++中explicit关键字作用
explicit是c++中不太常用的一个关键字,其作用是用于修饰构造函数,告诉编译器定义对象时不做隐式转换. 举例说明: include <iostream> include <st ...
- 关键字explicit的作用(转)
C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况 ...
- explicit的作用
用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换,例如:不加:Circle A = Circle(1.23) 加上之后:只能写:Circle A(1 ...
- explicit作用
在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换. explicit使用注意事项: explicit 关键字只能用 ...
- C++ explicit关键字应用方法详解
C++编程语言中有很多比较重要的关键字在实际编程中起着非常重要的作用.我们今天为大家介绍的C++ explicit关键字就是其中一个应用比较频繁的关键字.下面就让我们一起来看看这方面的知识吧. C++ ...
- explicit关键字
C++中,explicit关键字用来修饰类只有一个参数的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换. explicit使用注意事项: explicit 关 ...
随机推荐
- pandas处理csv,分组统计
需求: /tmp/demo/data下有10个csv文件,按col0和col1分组分别统计col2和col3总和并计算col2和col3的商 # encoding:utf-8 import panda ...
- 7.Springboot之web开发
自用 要解决的问题: 1.导入静态资源(html之类的(webapp)) 2.首页 3.没有写Jsp的地方-------->所以要学模板引擎Thymeleaf 4.装配扩展springmvc 5 ...
- NEKO's Maze Game
NEKO#ΦωΦ has just got a new maze game on her PC! The game's main puzzle is a maze, in the forms of a ...
- 苹果cms10 官方QQ微信防红防封代码
代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- DE1-soc软件实验”hello_word"
此实验需要工具:win32disk,路由器,sd卡,Embeed Design suite, Putty,usb to uart 驱动 选择文件,在拷贝到sd卡中去:烧写的文件是官方提供的SD卡的程序 ...
- UNICODE下CString转string
真搞不懂,为毛C++这么多类型转换.. CString m_str(_T("fuck conversion")); char *chr=new char[m_str.GetLeng ...
- 关于QImage和IplImage之间转换的实现
在嵌入式系统中实现qt和opencv的处理,最基础的就是QImage和IplImage之间的转换.这样两者就可以进行一起使用图像数据,从而达到利用qt显示和利用opencv处理的功能. 下面我将贴出代 ...
- jdk动态代理底层实现
一.代理设计模式 代理设计模式是Java常用的设计模式之一. 特点: 01.委托类和代理类有共同的接口或者父类: 02.代理类负责为委托类处理消息,并将消息转发给委托类: 03.委托类和代理类对象通常 ...
- java+layui的Excel导入导出
html: <button class="layui-btn" onclick="exportData();">导出</button> ...
- spring(三):ApplicationContext