Tôi đã chỉ duyệt qua draft of the C++11 standard và tìm thấy các tuyên bố sau khó hiểu (§13.6/8):unary + trên con trỏ
Đối với tất cả các loại
T
có tồn tại các chức năng điều hành ứng cử viên có dạngT* operator+(T*);
Toán tử "đơn nhất +" này được hiểu như thế nào? Đây có phải chỉ là một sự kiện không bình thường trong trường hợp bình thường, tuy nhiên nó có thể bị quá tải không? Hoặc có một số điểm sâu hơn tôi đang thiếu ở đây?
Vậy toán tử 'T * + (T *);' là thành viên hay toàn cục? và trong trường hợp của lambda -> '+ [] {};' cái gì là 'T' tôi tự hỏi? Cảm ơn –
@AngelusMortis: Con trỏ không thể có thành viên; điều này sử dụng hàm dựng sẵn đơn nhất của ngôn ngữ được gọi là 'operator +' cho các kiểu số học.Và kiểu '+ [] {}' là 'void (*)()', như là toán tử 'đơn nhất +' trên các lambdas vô hình chuyển đổi lambda thành một con trỏ hàm. – ildjarn
Thưa ông, tôi vẫn còn chút bối rối, vì vậy hãy hỏi bằng cách trích dẫn câu của bạn -> "Con trỏ không thể có thành viên" có nhưng tôi đã nghĩ ban đầu lambdas được chuyển đổi thành loại lớp (bởi trình biên dịch) quá tải 'operator()', do đó Tôi nghĩ họ có thể là thành viên. Bây giờ câu lệnh của bạn "điều này sử dụng toán tử nội trú đơn nhất' của ngôn ngữ + cho các kiểu số học ", tôi chắc chắn các kiểu số học về cơ bản là các kiểu float + float, sau đó cách biểu thức ->' + []() '->' operator + (some_unknown_type_I_don) 't_know) '-> được chuyển thành' void (*)() ' –