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

2018-03-26  本文已影响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。

上一篇 下一篇

猜你喜欢

热点阅读