我有两个重载函数,一个是带有const std :: string&参数的函数,另一个是带有bool参数的函数。我现在使用字面字符串调用该函数。调用了bool版本。这有点奇怪,确实是一个陷阱。
有人能解释为什么吗?
请看下面的代码。输出结果是:
有人能解释为什么吗?
请看下面的代码。输出结果是:
Write == 1
#include <iostream>
#include <string>
void write(const std::string& name_) {
std::cout << "Write == " << name_ << std::endl;
}
void write(bool name_) {
std::cout << "Write == " << name_ << std::endl;
}
int main()
{
write("data");
}
const char [5]
到bool
有一个标准的转换顺序,即数组到指针的转换,然后是布尔转换,因此这种转换比用户定义的转换要好。 - Kerrek SBbool
比用户定义的转换比如指针 ->std::string
更好。如果必要的话,你可以通过定义一个函数模板来绕过它,该模板将委托给命名类型特定的函数。 - Cheers and hth. - Alfstd::string
转换为用户定义的转换,它不会被选择为标准转换序列。添加另一个重载 -void write(char const *name_)
来解决您的问题。 - Praetorian