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

时间:2010-11-04 09:49:14

标签: 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;
}

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

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:2)

这是编译器的正确行为。无法使用bar(char*)参数调用const char *,因为这会破坏const正确性。另一方面,bar(bool)是一个有效的选择,因此被调用。如果您使用的是bar(const char*)而不是bar(char*),那么bar(const char*)当然会优先于bar(bool)来进行通话bar(str)