On Wikipedia Tôi thấy điều này:Mục đích của Parse Vexing là gì?
A a(A());
[này] có thể được disambiguated hoặc là
một định nghĩa biến của lớp [
A
], lấy một ví dụ mang tính chất của lớp [A
] hoặckhai báo chức năng cho hàm trả về đối tượng thuộc loại [
A
] và nhận một đối số đơn lẻ (chưa đặt tên) là một hàm trả về kiểu [A
] (và không lấy đầu vào).Hầu hết các lập trình viên mong đợi đầu tiên, nhưng tiêu chuẩn C++ yêu cầu nó được hiểu là thứ hai.
Nhưng tại sao? Nếu đa số cộng đồng C++ mong đợi hành vi trước đây, tại sao không làm cho nó trở thành tiêu chuẩn? Ngoài ra, cú pháp trên là nhất quán nếu bạn không tính đến sự mơ hồ phân tích cú pháp.
Ai đó có thể vui lòng khai sáng cho tôi không? Tại sao tiêu chuẩn đưa ra yêu cầu này?
Có con trỏ hàm ở đâu? –
Đọc thông báo lỗi - http://ideone.com/12sT80#view_edit_box Không phải là con trỏ hàm của loại 'T (*)()'? –
@templateboy: Thông điệp gây hiểu lầm: trong ngữ cảnh đó 'a' về cơ bản đã bị phân rã thành con trỏ hàm để sử dụng trong biểu thức' a.f', nhưng bản thân khai báo 'a' không liên quan gì đến các con trỏ hàm. –