C++中的explicit关键字
2016-03-27 00:01
387 查看
在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。
explicit使用注意事项:
explicit使用注意事项:
explicit 关键字只能用于类内部的构造函数声明上。 explicit 关键字作用于单个参数的构造函数。 在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换
#include <iostream> //在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类, //不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。 class Circle { public: explicit Circle(double r):R(r) { printf("double r.......\n"); } explicit Circle(int x ,int y = 0):X(x),Y(y) { printf("int x ,int y = 0.......\n"); } // 拷贝构造函数 explicit Circle(const Circle &c):R(c.R),X(c.X),Y(c.Y) { printf("const Circle &c.......\n"); } ~Circle() { printf("release...\n"); } private: double R; int X ; int Y; }; //未加 void main1() { //发生隐式类型转换 //编译器会将它变成如下代码 //tmp = Circle(1.23) //Circle A(tmp); //tmp.~Circle(); //Circle A = 1.23; //注意是int型的,调用的是Circle(int x, int y = 0) //它虽然有2个参数,但后一个有默认值,仍然能发生隐式转换 /*Circle B = 123;*/ //Circle B=123; //这个算隐式调用了拷贝构造函数 //Circle C = A; system("pause"); } void main() { //一下3句,都会报错 /*Circle A = 1.23; Circle B = 123; Circle C = A;*/ //只能用显示的方式调用了 //未给拷贝构造函数加explicit之前可以这样 //Circle A = Circle(1.23); //Circle B = Circle(123); //Circle C = A; //给拷贝构造函数加了explicit后只能这样了 Circle A(1.23); Circle B(123); Circle C(A); system("pause"); }
相关文章推荐
- C++ explicit关键字的应用方法详细讲解
- C++ explicit构造函数实例解析
- C++ Explicit关键字详细解析
- 什么时候加上android.intent.category.DEFAULT和LAUNCHER
- C++中的explicit关键字
- explicit和implicit
- explicit构造函数
- ARC forbids explicit message send of "release"
- C++中的explicit关键字
- 关于explicit防止构造函数隐式转换
- 基本类型的显示初始化(Explicit Initialization)
- 关键字 explicit
- Explicit关键字
- explicit
- C++学习笔记
- C++ 关键字 explicit
- C++ explicit关键字声明构造函数
- C++中的explicit关键字
- C++中explicit关键字的作用
- C# 自定义 implicit和explicit转换