【发布时间】:2014-10-16 21:11:04
【问题描述】:
为什么 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 * 跳转到 string,而只是假设 bool 是最接近指针的东西?我唯一的选择是创建一个与字符串构造函数基本相同的显式 char * 构造函数吗?
【问题讨论】:
-
我通常更喜欢显式转换。隐式转换有这样的问题。见stackoverflow.com/q/2346083/10077
-
我不确定,但是:两种转换都是可能的(将指针转换为布尔检查空指针)。但是转换为 bool 是 built-in 转换,而转换为 string 是 user-defined 转换(通过隐式 c'tor)。现在,如果我没记错的话,内置的优先级高于用户定义的。
标签: c++ string casting boolean overloading