Это потому, что "ASDADS"
конвертируется в char *
.Таким образом, компилятор генерирует код для первой функции, которой он может соответствовать аргумент.
Если вы удалите прототип с char *
, компилятор будет искать функции, которые принимают параметр с неявным приведением из char *
к типу параметра.
Возьмем, к примеру, следующее:
class A
{
public:
A() {}
A(int x) {}
};
//void foo(int x) {}
void foo(A x) {}
int main(int argc, char* argv[])
{
int x = 3;
foo(x);
}
если вы закомментируете foo(int x)
, будет вызвана другая функция.если вы объявите конструктор как explicit
, вы получите ошибку:
class A
{
public:
A() {}
explicit A(int x) {}
};