概述
explicit修饰符详解
在C++中,如果一个类只有一个参数的构造函数,C++允许一种特殊的声明类变量的方式,在这种情况下,可以直接将一个对应于构造函数参数类型的数据直接赋值给类变量,编译器在编译时会自动进行类型转换,将对应于构造函数参数类型的数据转换为类的对象。如下例所示:
#include<iostream>
using namespace std;
class Test
{
public:
Test(){cout<<"ctor()"<<endl;}
Test(int i){cout<<"ctor(int)"<<endl;}
};
int main(int argc,char**argv)
{
Test test=10;
return 0;
}
explicit关键字的作用就是禁止隐式转换这个特性,如文章一开始而言,凡是用explicit关键字修饰的构造函数,编译时就不会进行自动转换,而会报错。如下例所示:
#include<iostream>
using namespace std;
class Test
{
public:
Test(){cout<<"ctor()"<<endl;}
explicit Test(int i){cout<<"ctor(int)"<<endl;}
};
int main(int argc,char**argv)
{
Test test=10; //error:这里不允许隐式转换
Test test2(10); //success: 这里是规范的赋值
return 0;
}
注意:explicit关键字只是用于一个参数的构造函数,因为一个以上的参数基本上不存在隐式转换
最后
以上就是谨慎水杯为你收集整理的explicit修饰符详解explicit修饰符详解的全部内容,希望文章能够帮你解决explicit修饰符详解explicit修饰符详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复