我是靠谱客的博主 玩命诺言,最近开发中收集的这篇文章主要介绍C++之explicit构造函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

        在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。MSDN上的解释:

This keyword is a declaration specifier that can only be applied to in-class constructor declarations . An explicit constructor cannot take part in implicit conversions. It can only be used to explicitly construct an object 。
可以看到, explicit关键字的作用: 禁止隐式调用类内的单参数构造函数, 这主要包括三层意思:
(1)该关键字只能用来修饰类内部的构造函数
(2)禁止隐式调用拷贝构造函数
(3)禁止类对象之间的隐式转换

class People  
{  
    public:  
     int age;  
     explicit People (int a)//加上了explict关键字的构造函数  
    {  
      age=a;  
     }  
};  
void foo ( void )  
{  
     People p1(10); //方式一,显示调用,编译通过  
     People p3=10; //方式二,隐式调用,编译不通过 
}

总结:explicit 只对构造函数起作用,用来抑制隐式转换,一般只将有单个参数的constructor声明为explicit,而copy constructor不要声明为explicit。explicit关键字只对有一个参数的类构造函数有效, 如果类构造函数参数大于或等于两个时, 是不会产生隐式转换的, 此时explicit关键字无效:

class DefString  // 在类构造函数参数大于或等于两个时,explicit关键字无效  
{  
public:  
    char *pstr;  
    int age;  
    int size;  
    explicit DefString(int age, int size)  
    {  
        this->age = age;  
        this->size = size;  .  
    }  
};

最后

以上就是玩命诺言为你收集整理的C++之explicit构造函数的全部内容,希望文章能够帮你解决C++之explicit构造函数所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部