用C*中的char*参数和bool参数调用多态函数的优先级

use*_*007 2 c++ polymorphism

以下是代码段.

#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;
}
Run Code Online (Sandbox Code Playgroud)

何时bar()传递const char*参数,为什么bar(bool)被调用?不bar(char*)应该叫?

vit*_*aut 5

其原因是,没有来自隐式转换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;
}
Run Code Online (Sandbox Code Playgroud)