2010-11-04 9 views

Répondre

5

La raison est qu'il n'y a pas de conversion implicite de const char* à char* mais il y en a une de const char* à bool.

Voici un exemple quand bar(const char*) est appelé (note ajoutée 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

Ce comportement est correct par le compilateur. bar(char*) ne peut pas être appelé avec un argument const char *, car cela annulerait la const-correction. D'autre part, bar(bool) est un choix valide, c'est ce qui est appelé. Si vous aviez bar(const char*) au lieu de bar(char*), alors bar(const char*) aurait bien sûr été préféré à bar(bool) pour l'appel bar(str).