왜이 프로그램이 아래 출력을 생성하는지 이해할 수 없습니다.C++ const char * overloading confusion
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();
}
출력 : VS2008에서
const char*
unknown
const string
. std :: string을 const 참조로 변환하려고하지만 char *을 const char *로 변환하지 않고 왜 오버로드를 사용합니까?
간단히 말해서 가장 비슷한 옵션을 지정하면됩니다. 'class t'는 변환이 필요없는'char *'와 정확히 일치 할 수 있으므로 선호하는 것을 선택합니다. – Dave
(덧붙여 말하자면,'string' 예제는 참조로 변환되지 않고, 참조로 전달되는 것이 기본값이며, 일치하는 것이없는 경우에만 패스 - 바이 - 카피가됩니다.) 템플릿은 참조 - (rvalue 참조에 대한 특별한 경우 제외), 템플릿은 복사본으로 만 클래스를 받아 들일 수 있습니다. – Dave
문자열이 "참조로 전달되는 기본값"이라는 것은 무엇을 의미합니까? 't' 타입이'std :: string &'이 될 수없는 이유는 무엇입니까? 나에게 맞는 것은 두 가지 호출이 모두 정확히 일치한다는 것입니다. 'string'도'char *'도'const'가 아닙니다. –