Nếu tôi có một người dùng định nghĩa operator+()
như trong:Lỗi kêu gọi người dùng định nghĩa toán tử + trên đối tượng tạm thời khi có dấu ngoặc thêm
class A
{
public:
A operator+(A)
{
return A();
}
};
Sau đó, các công việc sau như mong đợi:
A a = A() + A();
nhưng g ++ - 4.7 đưa ra thông báo lỗi về các điều sau:
A a = (A()) + A();
Thông báo lỗi cụ thể là error: no match for ‘operator+’ in ‘+A()’
.
Có vẻ như (A())
đang bị bỏ qua trong biểu thức.
Câu hỏi của tôi là: là A a = (A()) + A();
phải biên dịch và nếu không, tại sao lại không?
Lưu ý: điều này đã xảy ra với tôi khi tôi thực hiện #define X (Identity())
và sau đó thử thực hiện X + X
.
Thú vị. Nếu bạn không biết, nó được coi là toán tử cộng đơn, ví dụ: +5. – chris
@chris Bây giờ bạn đề cập đến nó, lỗi này không xảy ra nếu bạn thay đổi ví dụ cho toán tử phép chia, nhưng nó cho các toán tử cộng, trừ và nhân. Có vẻ như nó phân tích các toán tử đơn nhất thay vì các toán tử nhị phân trong trường hợp này. – SirGuy