Tôi biết tôi có thể tự mình trả lời câu hỏi này một cách dễ dàng bằng mã generatin và xem nó có biên dịch hay không. Nhưng vì tôi không thể tìm thấy một câu hỏi tương tự, tôi nghĩ đó là kiến thức đáng để chia sẻ. Giả sử tôi đang quá tải toán tử + cho MyClass. Tôi có thể quá tải nó nhiều lần không. Quá tải khác nhau cho các loại khác nhau. Như thế này:C++ quá tải nhiều toán tử cho cùng một toán tử
class MyClass{
...
inline const MyClass operator+(const MyClass &addend) const {
cout<<"Adding MyClass+MyClass"<<endl;
...//Code for adding MyClass with MyClass
}
inline const MyClass operator+(const int &addend) const {
cout<<"Adding MyClass+int"<<endl;
...//Code for adding MyClass with int
}
...
};
int main(){
MyClass c1;
MyClass c2;
MyClass c3 = c1 + c2;
MyClass c4 = c1 + 5;
}
/*Output should be:
Adding MyClass+MyClass
Adding MyClass+in*/
Lý do tôi muốn làm điều này là tôi đang xây dựng một lớp học mà tôi muốn được tối ưu nhất có thể. Hiệu suất là mối quan tâm lớn nhất đối với tôi ở đây. Vì vậy, đúc và sử dụng trường hợp chuyển đổi bên trong các nhà điều hành + chức năng quá tải không phải là một lựa chọn. Tôi e bạn sẽ nhận thấy, tôi đã thực hiện cả hai tình trạng quá tải nội tuyến. Giả sử rằng trình biên dịch thực sự nhấn mạnh quá tải của tôi, sau đó nó được xác định trước tại thời gian biên dịch mã sẽ chạy, và tôi lưu cuộc gọi đến một hàm (bằng nội tuyến) + trường hợp chuyển đổi phức tạp (trong thực tế, sẽ có 5+ quá tải cho toán tử +), nhưng tôi vẫn có thể viết mã dễ đọc bằng cách sử dụng toán tử số học cơ bản. Vì vậy, tôi sẽ nhận được hành vi mong muốn?
Nếu bạn quan tâm đến hiệu suất, từ quan điểm của lớp, trả về '* this' thông qua' const Myclass & 'sẽ tốt hơn. Bây giờ, từ quan điểm của người dùng (trừ khi bạn đang biên soạn trên C++ 0x), bạn nên sử dụng '+ =' thay vì '+' và '=' để tránh các thời gian vô dụng có thể sẽ không được tối ưu hóa bởi một số crappy trình biên dịch. – paercebal
Tôi không biết tại sao điều này lại bị bỏ phiếu. Đó là một câu hỏi hoàn toàn hợp lệ.(Thực tế là bạn tìm thấy thông tin này ở nơi khác cũng không có lý do gì để không tìm thấy câu trả lời ở đây nữa.) – sbi
@paercebal: Ông đang thực hiện một khoản tiền chứ không phải là khoản tăng. Nếu anh ta đang thực thi 'operator + =', sau đó trả về một tham chiếu sẽ là tốt (sau khi sửa đổi trạng thái bên trong), nhưng 'a + b' không có nghĩa là sửa đổi' a', mà là tạo ra giá trị thứ ba khác với cả hai 'a' và' b'. –