Dlaczego C++ rzuca literał łańcuchowy, który przechodzę jako bool, a nie ciąg?Przeciążenie Bool/String Niejednoznaczność
#include <iostream>
using namespace std;
class A
{
public:
A(string v)
{
cout << v;
}
A(bool v)
{
cout << v;
}
};
int main()
{
A("hello");
return 0;
}
wyjściowa: 1
Czy dlatego, że kompilator nie jest wystarczająco inteligentny, aby skakać z char * na łańcuch a raczej po prostu zakłada, że bool jest najbliższa rzecz do wskaźnika? Czy jest moją jedyną opcją tworzenia konstruktora char *, który zasadniczo wykonuje dokładnie to samo, co konstruktor łańcuchów?
Generalnie preferuję jawne konwersje. Konwersje niejawne mają takie funkcje. Zobacz http://stackoverflow.com/q/2346083/10077 –
Nie jestem pewien, ale: możliwe są obie konwersje (konwertowanie wskaźnika na sprawdzanie bool dla wskaźnika pustego). Ale konwersja do bool jest * wbudowaną * konwersją, podczas gdy string jest * zdefiniowaną przez użytkownika * convesion (przez niejawny c'tor). A teraz, jeśli dobrze pamiętam, wbudowane mają wyższy priorytet niż te zdefiniowane przez użytkownika. – leemes
możliwy duplikat [Przeciążenie metody C++ nie działa] (http://stackoverflow.com/questions/14770252/c-method-overload-not-working) –