我有两个这样的构造函数重载,问题是输入了错误的构造函数重载:
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 ? 发布于 2013-01-17 20:58:22
它使用第二个构造函数,因为"desc"是一个可以隐式转换为bool的const char*,所以编译器就是这样做的。由于没有从const char*到std::string的隐式转换,因此第一个构造函数甚至不是这里的候选函数。
要使用第一个构造函数,您需要显式地传入一个string
Param p("name",4,std::string("desc"));发布于 2013-01-17 21:00:11
编译器更喜欢将字符串文字的类型"desc"转换为const char*,然后再转换为bool,而不是调用std::string的转换构造函数。您可以通过执行以下操作来确保调用第一个构造函数:
Param p("name",4,std::string("desc"));https://stackoverflow.com/questions/14379628
复制相似问题