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

#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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。