이 함수는 오버랩 된 함수입니까?C++에서 오버로드 된 함수
void f(int a, int b) {}
void f(int& a, int& b) {}
void f(int* a, int* b) {}
void f(const int a, const int b) {}
또는 오버로드 함수는 인수의 개수 나 유형이 다른 경우에만 발생합니까?
이 함수는 오버랩 된 함수입니까?C++에서 오버로드 된 함수
void f(int a, int b) {}
void f(int& a, int& b) {}
void f(int* a, int* b) {}
void f(const int a, const int b) {}
또는 오버로드 함수는 인수의 개수 나 유형이 다른 경우에만 발생합니까?
숫자 1, 2, 3이 있습니다. 숫자 4가 1을 다시 선언했습니다.
최상위 const 한정자는 함수 선언에 영향을주지 않습니다. 그들은 당신이 함수 정의 내에서이를 사용하는 방식을 변경,하지만 여전히 같은 기능
void f(int);
void f(const int); //redeclares
void f(const int x) //same as above
{
x = 4; //error, x is const
}
이있어, 다른 한편으로는 잘
void f(const int);
void f(int x) //same as above
{
x = 4; //OK Now
}
주 즉 비 최상위 consts 과부하 해결에 참여하십시오. 예 :
void f(int & x)
void f(const int & x) //another function, overloading the previous one
그리고 마지막으로, 당신은
요청 또는 인수의 수 또는 유형이 다른 경우에만 발생 기능을 오버로딩?
예, 그렇습니다 만, int
, int*
및 int&
다른 유형입니다. 물론 1 또는 3의 경우 대부분 모호한 호출이되지만 컴파일러가 어떤 것을 의미하는지 알 수있는 경우도 있습니다. 예를 들어,
void f(int);
void f(int&);
f(3)//calls f(int)
int x = 3;
f(x); //ambiguous call;
1 및 2는 lvalues와 모호성을 갖지만 그럼에도 불구하고 과부하입니다.
왜 출력/코드를 stackoverflow에 포함시키지 않습니까? 필자는 ideone이 특별한 컴파일/디버깅 기능이있는 pastebin이지만이 대답이 사라지기 전에 링크가 무효가 될 것임을 알 수 있습니다. –
1과 2는 r 값과 모호합니다 ... 아니면 l 값에도 적용됩니까? –
에 대한 모든 대답에 대해 나는 혼란 스럽다. C++의 Thinkin은 함수와 함수의 차이가 인수에 의해 전달되고 다른 인수는 참조로 전달된다는 점을 강조한다. 포인터를 전달하는 것은 어떨까요? 필자의 결론은 아무 것도 오버로드 된 함수가 아니라는 것입니다. – Kobe
1, 2가 모호성을 야기 : 그리고 4 일 1의 재정의입니다! – Nawaz
@Nawaz : 꼭 필요하지는 않음 –
최고 수준의 const에 주목하기 위해 +1. –