我是靠谱客的博主 谨慎水杯,最近开发中收集的这篇文章主要介绍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修饰符详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部