Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Забавный случай |
Автор: fear 7.6.2006, 13:13 | ||||||||
компилятор выдаёт ошибку в строке
где str - std::string пишет:
ошибка проподает, при компиляции сторок
или
Это как называется? |
Автор: Daevaorn 7.6.2006, 13:33 |
fear, он же тебе всё объяснил. ambiguous call это называется |
Автор: Earnest 7.6.2006, 13:48 |
Поскольку правый операнд не является char (и при этом равен 0), он может с равным успехом преобразоваться как к указателю, так и к char. Вот тебе и неоднозначность. Когда ты пишешь unsigned char(1), то к указателю это преобразовать нельзя, вот и остается только один вариант. |
Автор: sergejzr 7.6.2006, 14:30 |
Модератор: Название темы должно отражать ее суть! |
Автор: fear 8.6.2006, 11:13 | ||||
больше не буду Добавлено @ 11:14
Как это может преобразоваться к указателю, в моём понимании unsigned char(0) вызывает конструктор класса unsigned char и инициализирует, созданный объект нулём, или я не прав? |
Автор: LPBOY 8.6.2006, 11:41 | ||
Во-первых у встроенных типов нет конструкторов, не слушай ты этих Элджеров... Можно привести аналогичный пример:
Здесь происходит разрешение перегрузки. Выбирается функция, которая лучше всего подходит. При вызове функции 1, должно произойти преобразование (integral conversion) unsigned char -> char, а при вызове 2-й функции преобразование "null pointer constant" -> char*. Оба вида преобразований имеют одинаковый ранг, поэтому возникает неоднозначность. Если передавать в функйию не unsigned char, а просто char, то при вызове 1-й функции будет иметь место точное соответствие, что лучше чем любое преобразование, поэтому она и будет выбрана. |