美文网首页
C++ explicit关键字的初步研究

C++ explicit关键字的初步研究

作者: 狗子孙 | 来源:发表于2018-09-14 14:56 被阅读4次

    explicit关键字用于修饰构造函数,它不允许构造函数的参数进行隐式的类型转换。构造函数参数的隐式转换有时候很方便,但有时候却容易产生误解,例如下面的代码:

    #include <iostream>
    class MyString {
    public:
        MyString(int l) : len(l) {};
        MyString(char * s) : str(s) {};
        int len;
        char *str;
    };
    int main(void) {
        MyString s1(10);      // 长度为10,内容未定义
        MyString s2("hehe");  // 内容为hehe,长度未定义
        MyString s3 = 10;     // 长度为10,内容未定义
        MyString s4 = 's';    // 长度为115(s的ASCII)码,内容未定义
        return 0;
    }
    

    定义s3和s4的时候,发生了隐式的类型转换,这有时很有用,有时又让人费解,要禁用这里的类型转换,只要将构造函数MyString(int l) : len(l) {};更改成explicit MyString(int l) : len(l) {};即可。

    相关文章

      网友评论

          本文标题:C++ explicit关键字的初步研究

          本文链接:https://www.haomeiwen.com/subject/wgeogftx.html