Trong một tuyên bố chức năng, các tham số kiểu phân rã mảng vào con trỏ đến phần tử đầu tiên, các tham số kiểu chức năng phân rã thành một con trỏ hàm, vì vậy chữ ký sẽ là:
widget w(gadget(*)(), doodad(*)());
Đó là, một chức năng mà mất như là đối số đầu tiên một con trỏ tới một hàm dùng không có đối số và trả về gadget
, mà sẽ đưa như là đối số thứ hai là một con trỏ tới một hàm dùng không có đối số và trả về một doodad
và rằng chức năng tự trả về một widget
Thậm chí còn hơn thú vị hoặc confu hát ca, như:
// assume 'x' is a variable defined somewhere:
widget w(gadget(x));
Làm thế nào có thể rằng được hiểu như là một tuyên bố chức năng? Ý tôi là, x
là một biến, phải không? Vâng, khi khai báo một biến, bạn có thể thêm dấu ngoặc đơn phụ, vì vậy gadget x;
và gadget (x);
cả hai đều khai báo cùng một biến x
. Điều tương tự cũng áp dụng đối với hoạt động lập luận như vậy mã trên trông giống như một lời tuyên bố của một hàm mà phải mất một đối số đầu tiên mang tên x
loại gadget
và trả về một widget
...
Nguồn
2013-05-16 13:31:23
liên quan/dupe: http://stackoverflow.com/questions/9327505/about-pointers-to-functions-in-function-declarations – jrok