C++之explicit构造函数
来源:互联网 发布:大学java 教不教线程 编辑:程序博客网 时间:2024/06/08 20:01
在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。MSDN上的解释:
This keyword is a declaration specifier that can only be applied to in-class constructor declarations . An explicit constructor cannot take part in implicit conversions. It can only be used to explicitly construct an object 。
可以看到, explicit关键字的作用: 禁止隐式调用类内的单参数构造函数, 这主要包括三层意思:
(1)该关键字只能用来修饰类内部的构造函数
(2)禁止隐式调用拷贝构造函数
(3)禁止类对象之间的隐式转换
class People { public: int age; explicit People (int a)//加上了explict关键字的构造函数 { age=a; } }; void foo ( void ) { People p1(10); //方式一,显示调用,编译通过 People p3=10; //方式二,隐式调用,编译不通过 }
总结:explicit 只对构造函数起作用,用来抑制隐式转换,一般只将有单个参数的constructor声明为explicit,而copy constructor不要声明为explicit。explicit关键字只对有一个参数的类构造函数有效, 如果类构造函数参数大于或等于两个时, 是不会产生隐式转换的, 此时explicit关键字无效:
class DefString // 在类构造函数参数大于或等于两个时,explicit关键字无效 { public: char *pstr; int age; int size; explicit DefString(int age, int size) { this->age = age; this->size = size; . } };
0 0
- explicit构造函数(C++)
- 【C++】explicit构造函数
- [C++]explicit构造函数
- C++之explicit构造函数
- QObject构造函数explicit
- explicit构造函数
- [转]explicit构造函数
- explicit构造函数
- explicit构造函数
- explicit构造函数
- explicit构造函数
- explicit构造函数
- explicit构造函数
- explicit构造函数
- explicit构造函数
- explicit构造函数
- explicit构造函数
- explicit构造函数
- ES6中的Promise
- Object类中的equals(Object obj) 、String类的equals(Object obj)和 操作符“==”的区别
- asp.net signalR 专题—— 第一篇 你需要好好掌握的实时通讯利器
- asp.net signalR 专题—— 第二篇 对PersistentConnection持久连接的快速讲解
- 乐观锁和悲观锁的实例讲解
- C++之explicit构造函数
- asp.net signalR 专题—— 第三篇 如何从外部线程访问 PersistentConnection
- asp.net signalR 专题—— 第四篇 模拟RPC模式的Hub操作
- 使用memadmin可视化监视我们的memcache
- asp.net mvc 之旅—— 第三站 路由模板中强大的自定义IRouteConstraint约束
- Git使用教程_超详解
- 使用强大的可视化工具redislive来监控我们的redis,别让自己死的太惨~~~
- 列出目录内容命令ls
- HDU 1698 Just a Hook 线段树+lazy-target 区间刷新