Компилятор рассматривает s += 0;
как неоднозначный вызов. Он видит и operator+=(char*)
, и operator+=(char)
как допустимые вызовы.
Как и во всех других ответах, std::string
не может добавить целое число. Однако этот ответ на самом деле не отвечает на ваш вопрос, так как вы добавляете целое число 65
в одну строку, и это не вызывает ошибки.
Во-первых, это кажется несоответствием в вашей реализации C ++; это не должно работать . Но, учитывая, что это делает, почему добавление 0
терпит неудачу? Причина в том, что компиляторы C ++ рассматривают литерал 0
как целочисленный или нулевой указатель, в зависимости от контекста. (C ++ 11 добавил nullptr
, а друзья к добавили к , чтобы устранить этот источник путаницы.)
Поэтому, когда ваша реализация видит строку
s += 0;
он не может решить между звонками operator+=(char*)
и operator+=(char)
.