我是靠谱客的博主 谨慎水杯,这篇文章主要介绍explicit修饰符详解explicit修饰符详解,现在分享给大家,希望可以做个参考。

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修饰符详解内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部