首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有默认参数的重载构造函数

具有默认参数的重载构造函数
EN

Stack Overflow用户
提问于 2013-01-17 20:55:29
回答 2查看 103关注 0票数 3

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

代码语言:javascript
复制
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 ? 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-17 20:58:22

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

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

代码语言:javascript
复制
Param p("name",4,std::string("desc"));
票数 4
EN

Stack Overflow用户

发布于 2013-01-17 21:00:11

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

代码语言:javascript
复制
Param p("name",4,std::string("desc"));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14379628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档