在C ++中,隐式构造函数和默认构造函数有什么区别?


回答 1:
Foo类{
 上市:
  //默认ctor。
  Foo():i_(0){}

  //隐式转换ctor。
  Foo(int i):i_(i){}

  //复制ctor;不涉及转换。
  Foo(const Foo&f):i_(f.i_){}
 私人的:
  int i_;
};

无效Bar(Foo f){
  //用f做某事
}

main(){
  Foo f0; //使用默认的ctor。
  Foo f1(1); //使用转换ctor。
  酒吧(f0); //使用复制ctor。
  酒吧(2); //使用隐式转换ctor。
}
  Foo(int i = 0):i_(i){};

回答 2:
#include 
结构X {
    X(){std :: cout <<“这是X \ n的默认ctor”; }
};
结构Y {
    Y(int n = 0){std :: cout <<“这是Y \ n的默认ctor”; }
};
结构Z:X {
     // Z的构造函数被隐式定义
     //作为Z():X(){}
};
int main()
{
    X x; //调用X :: X()
    是//调用Y :: Y()
    Z Z; //调用Z :: Z(),然后调用X :: X();
}