2011-08-30 51 views
5

Tại sao việc gán mà không có '&' được biên dịch trong mã sau? Tôi đã biên dịch mã với GCC 3.4.6. Có quyền chỉ định không có & hoặc đây là "tính năng" của GCC không?con trỏ trỏ đến chức năng gán

void func() { 
} 

int main() { 
    typedef void (*F)(); 

    F f; 
    f = &func; // the way of assigning pointer to function. 
    f = func; // this is also working. 

    (*f)(); 

    return 0; 
} 

Trả lời

13

Điều này hoàn toàn ổn. Cả hai câu lệnh đều hoàn toàn tương đương nhau. Hàm lvalue được chuyển đổi thành một con trỏ để hoạt động thông qua một chuyển đổi chuẩn. §4.3/1:

Một giá trị của loại hàm T có thể được chuyển đổi thành giá trị của loại “con trỏ đến T.” Kết quả là con trỏ đến hàm.

+0

Xin cảm ơn, tôi đã cố gắng tìm một tham chiếu. –

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