Класс String
имеет два конструктора;один для построения String
из int
и один для построения String
из константного указателя на char
.Эти два конструктора, следовательно, также являются функциями преобразования, потому что они действительно преобразуют один тип в другой.Первый конструктор, однако, является явным конструктором.В то время как второй конструктор допускает неявное преобразование из указателя на char
в String
, первый конструктор требует явного запроса на преобразование.
Например:
String s;
s = 10; // error: implicit conversion from int to String
s = String(10); // ok: explicit conversion of int to String.
Первый комментарий об ошибке просто говорит, что не существует конструктора для преобразования char
в String
.Опять же, у нас есть только два конструктора: один для преобразования int
, другой константный указатель в char
.
Вторая ошибка говорит о передаче в качестве параметра int
функции, которая требуетString
.Это означает, что функция должна создать String
из int
неявно .Это не может быть сделано, потому что соответствующий конструктор является явным.Если бы вы построили String
из int
и затем передали бы эту String
в функцию, все было бы хорошо.
Третья ошибка точно такая же, как и вторая, только здесь неявнаяпреобразование (которое завершается неудачно) заключается в возврате int
, когда возвращаемое значение должно быть String
.
. Интересно отметить, что код будет компилироваться, если целое число вваш код будет 0, а не 10. Причина в том, что 0 может быть неявно приведен к адресу (NULL-адресу), и это допустимое значение для конструктора, который принимает указатель.
String s;
s = 0; // ok
s = '\0' // ok