美文网首页
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的构造函数不能隐式调用

    #include using namespace std; class Test1 { public: Tes...

  • explicit 关键字

    1. explicit介绍 类的构造函数被声明为explicit方式,可以用来阻止隐式类型转换,但被声明为expl...

  • explicit

    C++提供了[关键字]explicit,可以阻止不应该允许的经过[转换构造函数]进行的隐式转换的发生。声明为exp...

  • c++ explicit 关键字

    explicit的作用是用来声明类构造函数是显示调用的,而非隐式调用,所以只用于修饰单参构造函数。因为无参构造函数...

  • C++构造函数前面添加explicit关键字的作用

    C++中的 explicit关键字主要是用来修饰类的构造函数,表明该构造函数是显式的,禁止单参数构造函数的隐式转换...

  • [C++11阅读][2-3-1]显式类型转换

    避免已知类型向自定义类型隐式转换 explicit关键字加在构造函数前面,可以声明此函数应当被显式调用,而不是在隐...

  • GeekBand-C++面向对象高级编程(下)-Week1

    转换函数 explicit关键字 指定构造函数需要显式调用,这样编译器就不会做隐式转换,避免因one-argume...

  • C++构造函数之explicit

    构造函数只有一个参数的情况下有可能发生隐式转换 使用explicit修饰构造函数 该构造函数就不会发生隐式转换

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

    explicit关键字用于修饰构造函数,它不允许构造函数的参数进行隐式的类型转换。构造函数参数的隐式转换有时候很方...

  • C/C++ tip2

    explicit与隐式类型转换 在调用函数时,如果传给函数的参数和任何一个已经声明的同名函数都不匹配,那么c++编...

网友评论

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

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