C++ explicit 关键字使用

来源:互联网 发布:网络红人毒药身世 知乎 编辑:程序博客网 时间:2024/06/05 05:11

explicit关键字

首先举一两个例子:

class MyString{    //分配n个字节空间    MyString(int n);    //利用const char*初始化    MyString(const char* str);};MyString strMy(7); //调用第一个构造函数,分配7个字节空间MyString strMy1 = MyString(7);//没有问题MyString strMy2 = ’a';//这样调用呢?你可能会认为是用字符a初始化,                                                                   //其实 还是分配int('a')也就是97个字节的空间

以上strMy2的初始化是一种隐式的转换,很明显,又些时候,我们需要避免这种隐式的转换,以防止不可控制的程序bug,那么,我们只需要在第一个构造函数前用explicit关键字限定即可:如下:

class MyString{    //分配n个字节空间    explicit MyString(int n);    //利用const char*初始化    MyString(const char* str);};MyString strMy1 = 7; //编译报错,无法隐式转换MyString strMy2 = ’a';//编译报错,无法隐式转换MyString strMy3(7); //调用第一个构造函数,分配7个字节空间MyString strMy4 = MyString(7);//没有问题 同上
原创粉丝点击