32

C++ xử lý các con trỏ hàm liên quan đến các hàm với các tham số mặc định như thế nào?Con trỏ hàm với tham số mặc định trong C++

Nếu tôi 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); 

Những chức năng gợi ý tôi có thể sử dụng liên quan đến chức năng đó?

Trả lời

30

Cả hai foo()bar() chỉ có thể được gán cho func_ptr2.

§8.3.6/2:

Một đối số mặc định không phải là một phần của các loại của một hàm. [Ví dụ:

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 dụ]

+1

vì thông số mặc định thực sự được trình biên dịch triển khai? – YeenFei

+1

Bởi vì đối số mặc định không được xem xét cho loại, tức là 'int f (int)' và 'int g (int = 0)' có cùng loại. –

+0

Điều đó sẽ loại trừ func_ptr1. Điều gì về func_ptr3? –

0

Mặc định lập luận không thể cung cấp cho con trỏ đến chức năng.

Các vấn đề liên quan