为什么C++将字符串文字转换为布尔值而不是字符串?重载布尔/字符串歧义
#include <iostream>
using namespace std;
class A
{
public:
A(string v)
{
cout << v;
}
A(bool v)
{
cout << v;
}
};
int main()
{
A("hello");
return 0;
}
输出:1
是因为编译器是不是足够聪明,使从字符*串跳跃和而只是假设布尔是最接近的指针?我唯一的选择是创建一个明确的char *构造函数,它基本上和字符串构造函数完全一样吗?
我通常更喜欢明确的转换。隐式转换有这样的陷阱。请参阅http://stackoverflow.com/q/2346083/10077 – 2014-10-16 21:18:23
我不确定但是:两种转换都是可能的(将指针转换为布尔检查空指针)。但转换为布尔是*内置*转换,而字符串是*用户定义的* convesion(通过隐式c'tor)。现在,如果我没有记错,内置插件比用户定义的优先级更高。 – leemes 2014-10-16 21:19:03
可能重复的[C++方法重载不工作](http://stackoverflow.com/questions/14770252/c-method-overload-not-working) – 2014-10-16 21:57:26