explicit构造函数
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
explicit构造函数
⼀、构造函数、默认构造函数、合成的默认构造函数
构造函数,是函数名与类名同样、没有返回类型的特殊的成员函数。
能够有初始化列表。
默认构造函数,没有形參。
或全部形參都有默认实參的构造函数。
假设没有显⽰定义不论什么构造函数,编译器会⾃⼰主动创建合成的默认构造函数。
⼀个类哪怕仅仅定义了⼀个构造函数(⽆论是不是默认构造函数),编译器也不会再⽣成默认构造函数。
合成的默认构造函数使⽤与变量初始化同样的规则来初始化成员:具有类类型的成员通过执⾏各⾃的默认构造函数来进⾏初始化。
内置和复合类型的成员。
如指针和数组,仅仅对定义在全局作⽤域中的对象才初始化,当对象定义在局部作⽤域中时。
内置和复合类型的成员不进⾏初始化。
⼆、隐式类类型转换
单个形參的构造函数定义了从形參类型到该类类型的⼀个隐式转换。
那么。
怎样抑制由构造函数定义的隐式转换?
三、explicit (显⽰)构造函数
能够通过将构造函数声明为explicit。
explicit keyword仅仅能⽤于类内部的构造函数声明上,不能在类的定义体外部的函数定义上再反复它。
通常。
除⾮有明显的理由想要定义隐式转换。
否则,单形參构造函数应该为explicit。
将构造函数设置为 explicit 能够避免错误。
⽽且当转换实⽤时,⽤户能够显⽰地构造对象。
參考:C++ Primer 中⽂版第4版P393
对于仅仅定义了explicit构造函数的类来说,仅仅能使⽤直接初始化,不能使⽤复制初始化。
參见C++ Primer 中⽂版第4版P407。