爲什麼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