c++ explicit关键字详解
来源:互联网 发布:php后缀的文件怎么打开 编辑:程序博客网 时间:2024/05/17 21:55
explicit用来防止由构造函数定义的隐式转换。 Test类的构造函数就定义了一个从int类型到Test类型的隐式转换。
隐式转换:可以由单个实参来调用的构造函数定义了一个从形参类型到该类类型的隐式转换。
例如:
- #include<iostream>
- using namespace std;
- class Test
- {
- private:
- int a;
- int b;
- public:
- Test(int x){
- a=x;
- }
- int get(){
- return a;
- }
- };
- void print(Test t){
- cout<<t.get()<<endl;
- }
- int main(){
- print(100);
- return 0;
- }
编译器在试图编译某一条语句时,如果某一函数的参数类型不匹配,编译器就会尝试进行隐式转换,如果隐式转换后能正确编译,编译器就会继续执行编译过程,否则报错。
例如在上述代码中的print(100)语句中,100是int类型的数据,而print函数的参数要求是Test类型的,类型不匹配,编译器就会利用Test的构造函数进行隐式转换,将100转换为一个Test类型的实例,而后继续编译。
上述代码最终能够正确编译,最终执行结构为:
而explicit关键字是阻止单参数构造函数的这种隐式转换机制。
如果在上述的代码中的Test构造函数前面加上explicit修饰的话,编译就会出错,如下:
由此可见,被声明为explicit的构造函数禁止编译器执行非预期的类型转换。
0 0
- C++ explicit关键字详解
- 关键字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关键字详解
- I2C总线一
- [完美解决]当前不会命中断点。还没有为该文档加载任何符号。
- 通过viewpager+fragment结合FragmentPagerAdapter实现自定义view定时轮转
- request post get
- kindeditor判断输入为空
- c++ explicit关键字详解
- XML学习笔记(二)
- Python中的yield
- AWK简明教程
- Android的Proxy/Delegate Application框架
- spring(基础七) spring事务回滚详解
- contains uncommitted changes解决办法
- 图片url
- jsp 开发中的 json