4
이 프로그램은 :기본 인수가있는 함수에서 함수를 호출 할 수없는 이유는 무엇입니까?
#include <iostream>
void foo(void (*bar)()){ bar(); };
void foo(int a = 5)
{
std::cout << a << std::endl;
}
int main()
{
foo(foo); //Error
}
나는 결국 foo(5)
가 호출 될 것으로 예상. 반면, 다음과 같은 프로그램은 잘 작동 :
#include <iostream>
void foo(void (*bar)()){ bar(); };
void foo()
{
std::cout << 5 << std::endl;
}
int main()
{
foo(foo); //OK
}
당신이 그 차이를 설명 할 수 있을까요?
기본 인수가 있으면 함수의 서명이 변경되지 않습니다. 또한 컴파일러는 callsite에 기본 인수를 추가합니다. 제공하지 않으면 함수에 대한 포인터를 만들 때가 아닙니다. – Praetorian
@Praetorian 그래서 첫 번째 경우에 함수를 어떻게 호출 할 수 있습니까? –
나는 할 수 있다고 생각하지 않는다. 함수에 대한 포인터를 살펴보면 기본 인수에 대한 정보가 손실되지만 잘못되었을 수 있습니다. – Praetorian