Вопрос

Указатели представляют некоторые особые проблемы для разрешения перегрузки.

Скажем, например,

void f(int* x) { ... }
void f(char* x) { ...}
int main()
{
    f(0);
}

Что не так с вызовом f (0)? Как я могу исправить вызов функции для f (0)?

Это было полезно?

Решение

f ((int *) 0) или f ((char *) 0)

Но если вы обнаружите, что делаете это, я бы еще раз взглянул на ваш дизайн.

Другие советы

Примените его или не используйте вовсе:

f((int*)0);

Что неправильно с вызовом f (0), так это то, что разрешение неоднозначно. Обе ваши перегруженные функции имеют указатель, который в этом случае может быть разрешен только с помощью приведения.

f((int*)0)

В зависимости от того, что вы пытаетесь сделать, есть и другие варианты, которые не являются двусмысленными.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top