美文网首页
explicit constructors

explicit constructors

作者: 吃柠檬的鸮 | 来源:发表于2019-05-02 22:59 被阅读0次

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

    // 定义了只含一个 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。例外情况应该在注释中明确说明。

    相关文章

      网友评论

          本文标题:explicit constructors

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