2010-11-04 51 views

回答

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; 
} 
2

這是由編譯器正確的行爲。 bar(char*)不能與const char *參數一起調用,因爲這會破壞const正確性。另一方面,bar(bool)是一個有效的選擇,所以這就是所謂的。如果您有bar(const char*)而不是bar(char*),那麼bar(const char*)當然會優於bar(bool),呼叫bar(str)