源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

浅谈C++ Explicit Constructors(显式构造函数)

  • 时间:2021-12-17 22:48 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:浅谈C++ Explicit Constructors(显式构造函数)
C++ 为类(Class)提供了许多默认函数。如果自己没有申明,编译器会为我们提供一个[b]copy构造函数、一个copy assignment操作符和一个析构函数[/b]。此外,如果没有申明任何构造函数,编译器会为我们申明一个default构造函数。很像下面的Empty类:
class Empty{
  public:
    Empty();
    Empty(const Empty &rhs);
    ~Empty();
    Empty& operator=(const Empty &rhs);
};
就像Effective C++说的,[b]如果不想使用编译器自动生成的函数,就应该明确拒绝。[/b] [b]1.C++中的隐式构造函数[/b] 如果c++类的[b]其中一个构造函数有一个参数[/b],那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象。 [b]2.Explicit Constructors显式构造函数[/b] 为了避免上面提到的只有一个参数的构造函数采用的缺省转换操作,在构造函数前,使用Explicit 关键字修饰即可。 [b]3.如下面的例子:[/b]
#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(显式构造函数)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程素材网。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部