왜 첫 번째 함수 호출 (cm(car);
)이 첫 번째 함수에 바인딩됩니까?첫 번째 함수 호출이 첫 번째 함수에 바인딩되는 이유는 무엇입니까?
두 번째 호출은 두 번째 함수에 바인딩된다는 점을 알고 있습니다. 두 번째 호출은 둘 다 완벽하게 일치하지만 템플릿이 아니기 때문에 두 번째 함수에 바인딩된다는 것을 알고 있습니다.
제 함수로서, 고정 된 어레이 길이 비 주형으로 정의되는 경우, 다시이 (두 번째 전화가 모호한 그렇게 할 것이다) 제 하나 이상 선택된 얻는다보다
void cm(const char (&h)[8]) {cout << "const char (&)[8]" << endl;}
.
코드 :
template<size_t N> void cm(const char (&h)[N])
{std::cout << " const (&)[N] " << endl;}
void cm(const char * h)
{cout << " const char * " << endl;}
int main()
{
char car[] = "errqweq";
const char ccar[] = "errqweq";
cm(car);
cm(ccar);
}
출력 :
const (&)[N]
const char *
글쎄, const char []가 스트링 리터럴로 그렇게 할 줄은 몰랐다. 나는이 경우 char []'처럼 행동 할 것이라고 생각했다. –
답안의 마지막 단락에있는 논쟁은 부정확합니다. 그렇지 않습니까? – Columbo