以下是代码段。
#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*)
被召唤?
答案 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)
。