美文网首页
C++ Explicit Constructors

C++ Explicit Constructors

作者: 未来已来_1cab | 来源:发表于2019-01-23 15:38 被阅读0次

    C++ 为类(Class)提供了许多默认函数。如果自己没有申明,编译器会为我们提供一个copy构造函数、一个copy assignment操作符和一个析构函数。此外,如果没有申明任何构造函数,编译器会为我们申明一个default构造函数。很像下面的Empty类:

    class Empty{
        public:
            Empty();
            Empty(const Empty &rhs);
            ~Empty();
            Empty& operator=(const Empty &rhs);
    };
    

    就像Effective C++说的,如果不想使用编译器自动生成的函数,就应该明确拒绝。

    1.C++中的隐式构造函数

    如果c++类的其中一个构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象。

    2.Explicit Constructors显式构造函数

    为了避免上面提到的只有一个参数的构造函数采用的缺省转换操作,在构造函数前,使用explicit 关键字修饰即可。

    3.如下面的例子:

    #include <iostream>
    using namespace std;
    class B{
        public:
            int data;
            B(int _data):data(_data){}
            //explicit B(int _data):data(_data){}
    };
    
    int main(){
        B temp=5;
        cout<<temp.data<<endl;
        return 0;
    }
    

    程序第11行,将int转换为B类型的对象,就是使用了隐式构造函数。因为B中存在一个只有一个参数的构造函数,且参数类型也是int。

    如果在构造函数前加explicit ,表示为显示构造函数,则第11行编译不能通过。因为这时,就没有隐式构造函数啦。

    相关文章

      网友评论

          本文标题:C++ Explicit Constructors

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