Re[11]: Почему вызывается test(char*)?
От: Станислав Артемкин  
Дата: 15.09.06 08:31
Оценка:
V>Опять, я не спрашиваю почему происходит неоднозначность, я спрашиваю почему она должна происходить, улавливаешь разницу?

Так как в противном случае нарушалась бы семантика вызова в зависимости от контекста.

Имеем
void test(const char(&)[5])   // (1)
{
   // do something
}
void test(const char*)        // (2)
{
   // do something different
}


Допустим, что обе функции не равнозначны с точки зрения перегрузки для массива из 5 элементов, т.е. первая предпочтительнее т.к. не требует array-to-pointer conversion.

test("test"); // "test" - это array of 5 const char, вызывается (1).

const char* name = "test";
test(name);   // name - это pointer to const char, вызывается (2).


Получаем опасную неоднозначность вызова.
Стас
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.