1.默认构造函数和explicit关键字的使用
来源:互联网 发布:网络十大作家排行榜 编辑:程序博客网 时间:2024/05/17 04:27
1.默认构造函数
C++里面有默认的构造函数,这样的构造函数要么不带有参数,要么每个参数都有相应的缺省值。下面我们来看一个例子:
#include <iostream>using namespace std;class A{public:A(){}};int main(){A aObj1();return 0;}
上面的我们定义了一个A类型的对象,使用了默认的构造函数。下面我们再来看一段代码:
#include <iostream>using namespace std;class A{public:A(int i = 0, bool b = true){}};int main(){A aObj1();return 0;}
2.explicit关键字
explicit关键字可以阻止对象被隐形类型转换,有些时候编译器会做一些人们无法预知的类型转换,下面我们来看一段代码:
#include <iostream>using namespace std;class B{public:B(int x = 0, bool b = true){}};void doSomething(B bObject){}int main(){B bObj1;doSomething(bObj1); // 没有问题B bObj2(28); // 也没有问题 // 我去,竟然也没有问题,但是默认发生了隐式的转换(把一个整形隐式的转换成的一个B类型),但是这个是我们不想要 doSomething(28);doSomething(B(28)); // 没有问题return 0;}红色加粗的代码在编译的时候没有出错是因为 int 和 B隐式的发生了类型转换,是不是很可怕,我们可以使用explicit关键字来阻止,看下面代码:
#include <iostream>using namespace std;class B{public:explicit B(int x = 0, bool b = true){}};void doSomething(B bObject){}int main(){B bObj1;doSomething(bObj1); // 没有问题B bObj2(28); // 也没有问题// 报错:error C2664: 'doSomething' : cannot convert parameter 1 from 'const int' to 'class B'doSomething(28);doSomething(B(28)); // 没有问题return 0;}所以一般构造函数之前添加一个 explicit 关键字会使得程序安全性更高,不会发生类型的隐式转换。
0 0
- 1.默认构造函数和explicit关键字的使用
- 构造函数的explicit关键字声明
- C++修饰构造函数的explicit关键字
- C++修饰构造函数的explicit关键字
- explicit 关键字修饰构造函数
- 拷贝构造函数、explicit关键字
- 关键字explicit修饰构造函数
- 关键字explicit与构造函数
- C++构造函数explicit关键字
- 【explicit关键字:构造函数前面出现的关键字】
- explicit 和构造函数一起使用
- 关于explicit,和构造函数一起使用.
- C++三种构造函数以及explicit和friend关键字
- explicit C++关键字的使用 修饰的构造函数必须被显式调用
- C++构造函数的隐式转换和关键字explicit的用法
- 关于QT/C++中explicit关键字和构造函数的*parent参数的简单说明
- c++的转换构造函数和杜绝隐式类型转换的explicit关键字
- C++的隐式转换和explicit关键字---用于防止构造函数隐式转换
- Vijos P1531 食物链
- 101. Symmetric Tree
- java.lang.UnsatisfiedLinkError: Couldn’t load locSDK3: findLibrary returned null.
- 【BZOJ4052】【Cerc2013】Magical GCD 单调栈
- hdu 1875 畅通工程再续(最小生成树,prim)
- 1.默认构造函数和explicit关键字的使用
- 电脑大小端自测
- Python 中的Pyc文件
- Scipy SVD
- 一切成功源于积累——20160604 美国非农15分钟k线直至收盘 各货币对表现 大幅不及预期 黄金3000点
- js判断当前浏览器是否为IE
- 粒子系统-变色龙
- 数据挖掘学习1----随机森林
- RMQ算法