32

C++에서 기본 매개 변수가있는 함수와 관련하여 함수 포인터를 처리하는 방법은 무엇입니까?C++에서 기본 매개 변수가있는 함수 포인터

내가있는 경우 : 내가하는 기능에 관련하여 사용할 수있는 기능 포인터

void foo(int i, float f = 0.0f); 
void bar(int i, float f); 


void (*func_ptr1)(int); 
void (*func_ptr2)(int, float); 
void (*func_ptr3)(int, float = 10.0f); 

?

답변

30

foo()bar()func_ptr2에만 할당 할 수 있습니다.

§8.3.6/2 :

기본 인수는 함수 유형의 일부가 아닙니다. [예 :

int f(int = 0); 

void h() { 
    int j = f(1); 
    int k = f(); // OK, means f(0) 
} 

int (*p1)(int) = &f; 
int (*p2)() = &f; // error: type mismatch 

--end 예]

+1

기본 매개 변수가 실제로 컴파일러에서 구현 되었기 때문에? – YeenFei

+1

기본 인수가 유형에 고려되지 않았기 때문에 'int f (int)'와 'int g (int = 0)'의 유형이 동일합니다. –

+0

그러면 func_ptr1이 제외됩니다. func_ptr3은 어떻습니까? –

0

기본 인자는 함수 포인터를 제공 할 수 없다.