美文网首页
C++声明为explicit的构造函数不能隐式调用

C++声明为explicit的构造函数不能隐式调用

作者: 欢喜明 | 来源:发表于2018-03-26 19:49 被阅读0次

    #include<iostream>

    using namespace std;

    class Test1

    {

    public:

        Test1(int n)

        {

            num=n;

    cout << num << endl;

        }//普通构造函数

    private:

        int num;

    };

    class Test2

    {

    public:

        explicit Test2(int n)

        {

            num=n;

    cout << num << endl;

        }//explicit(显式)构造函数

    private:

        int num;

    };

    int main()

    {

        Test1 t1=12;//隐式调用其构造函数,成功

        Test2 t2=12;//编译错误,不能隐式调用其构造函数

        Test2 t2(13);//显式调用成功

        return 0;

    }

    记录1:编译报错:/tmp/136684261/main.cpp:28:11: error: no viable conversion from 'int' to 'Test2'

        Test2 t2=12;//编译错误,不能隐式调用其构造函数。

    有时候在我们写下如 AAA = XXX, 这样的代码, 且恰好XXX的类型正好是AAA单参数构造器的参数类型, 这时候编译器就自动调用这个构造器, 创建一个AAA的对象,如:Test1 t1=12;

    记录2:

    int main()

    {

        Test1 t1=12.1;//隐式调用其构造函数,成功

        //Test2 t2=12;//编译错误,不能隐式调用其构造函数

        Test2 t2(13.1);//显式调用成功

        return 0;

    }

    如果创建对象的时候传入的是浮点数,会被转换为整型,输出:12   13。

    相关文章

      网友评论

          本文标题:C++声明为explicit的构造函数不能隐式调用

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