C++ explicit 关键字使用

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);//没有问题 同上

猜你喜欢

转载自blog.csdn.net/bear_861110453/article/details/76369825