Проблемы с указателем при перегрузке в C ++? - PullRequest
0 голосов
/ 13 марта 2009

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

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

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

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

Ответы [ 3 ]

6 голосов
/ 13 марта 2009

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

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

0 голосов
/ 13 марта 2009

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

f((int*)0)

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

0 голосов
/ 13 марта 2009

Разыграйте или не используйте вообще:

f((int*)0);
...