1

このプログラムが以下の出力を生成する理由がわかりません。

void blah(const char* )       {printf("const char*\n");}
void blah(const std::string&) {printf("const string ref\n");}
template<class t>
void blah(t)                  {printf ("unknown\n");}

int main(int, char*)
{        
  blah("hi");
  char a[4];
  blah(a);
  std::string s;
  blah(s);
  getch();
}

出力:

const char*
unknown
const string

VS2008で。std::string を const 参照に変換しても構わないと思っていますが、char* を const char* に変換してオーバーロードを使用しないのはなぜですか?

4

1 に答える 1