explicit constructors

通常情况下,只含有一个参数的构造函数可被用于转换。

// 定义了只含一个 string 参数的构造函数
Foo::Foo(std::string name);
// 传入一个 Foo 类型的值
void Foo::func(Foo f);


Foo foo1;
foo1.func(“AAA”);
// 等价于
// Foo tmp(“AAA”);
// foo1.func(tmp);

但有时候并不希望通过转换生成一个新对象,因此,为避免构造函数被调用造成隐式转换,可以将其声明为 explicit

结论:
有单参数的构造函数必须是明确的。在类的定义中,将关键字 explicit 加到单参数的构造函数之前。
有例外的情况是:构造函数可以不声明为 explicit;特意作为其他类的透明包装器的类的单参数构造函数也可以不声明为 explicit。例外情况应该在注释中明确说明。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容