вызов приоритета функции полиморфизма с аргументом char * и аргументом bool в C ++ - PullRequest
2 голосов
/ 04 ноября 2010

Ниже приведен фрагмент кода.

#include <stdio.h>

void bar(char* ptr) {
  printf("bar(char*) is called\n");
}

void bar(bool ptr) {
  printf("bar(bool) is called\n");
}

int main() {
  const char* str = "abc";
  bar(str);

  return 0;
}

Когда bar() передается параметр const char*, почему вызывается bar(bool)? Разве нельзя назвать bar(char*)?

Ответы [ 2 ]

5 голосов
/ 04 ноября 2010

Причина в том, что не существует неявного преобразования из const char* в char*, но есть одно из const char* в bool.

Вот пример, когда вызывается bar(const char*) (примечание добавлено const):

#include <stdio.h>

void bar(const char* ptr) { printf("bar(const char*) is called\n"); }
void bar(bool ptr) { printf("bar(bool) is called\n"); }

int main()
{
    const char* str = "abc";
    bar(str);
    return 0;
}
2 голосов
/ 04 ноября 2010

Это правильное поведение компилятора. bar(char*) не может быть вызван с аргументом const char *, так как это нарушило бы правильность const. С другой стороны, bar(bool) является допустимым выбором, так что это то, что вызывается. Если бы у вас было bar(const char*) вместо bar(char*), тогда, конечно, bar(const char*) было бы предпочтительнее bar(bool) для вызова bar(str).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...