繁体   English   中英

带有默认参数的重载构造函数

[英]Overloaded constructor with default parametars

我有两个像这样重载的构造函数,问题是输入了错误的构造函数重载:

class Param
{ 
    Param(
     const std::string& name,
     const MyVariant& variant = MyVariant()
     const std::string& desc = std::string(""),
     bool b1 = true,
     bool b2 = true )
     :
     mName(name),
     mValue(variant),
     mDesc(desc),
     mB1(b1),
     mB2(b2) {}

     Param( 
      const std::string& name,
      const MyVariant& variant,
      bool b1)
      :
      mName(name),
      mValue(variant)
      mB1(b1) {}

   private:
      std::string mName;
      MyVariant mValue;
      std::string mDesc;
      bool mB1;
      bool mB2;
};

 Param p("name",4,"desc"); // this enters the second constructor, not the first why ? 

它使用第二个构造函数,因为"desc"是一个const char* ,可以隐式转换为bool ,这就是编译器的作用。 没有从const char*std::string隐式转换,所以第一个构造函数在这里甚至不是候选者。

要使用第一个构造函数,您需要显式传入一个string

Param p("name",4,std::string("desc"));

编译器更喜欢将字符串文字的类型"desc"转换为const char* ,然后转换为bool ,而不是调用std::string的转换构造函数。 您可以通过执行以下操作确保调用第一个构造函数:

Param p("name",4,std::string("desc"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM