Giáo viên C++ của tôi nghĩ rằng toán tử * trong tiêu chuẩn C++ là "đã quá tải", bởi vì nó có thể có nghĩa là gián tiếp hoặc phép nhân tùy thuộc vào ngữ cảnh. Ông nhận được điều này từ C++ Primer Plus, trong đó nêu rõ:Nhà điều hành C++ * "đã quá tải chưa?"
Thực tế, nhiều nhà khai thác C++ (và C) đã bị quá tải. Ví dụ, toán tử *, khi được áp dụng cho một địa chỉ, sinh ra giá trị được lưu trữ tại địa chỉ đó. Nhưng việc áp dụng * cho hai số sẽ tạo ra sản phẩm của các giá trị. C++ sử dụng số lượng và loại toán hạng để quyết định hành động cần thực hiện. (pg 502, 5th ed)
Ít nhất một sách giáo khoa khác nói nhiều như nhau. Cho đến nay tôi có thể nói, điều này không đúng; unary * là một toán tử khác với nhị phân * và cơ chế mà trình biên dịch làm cho chúng không có gì liên quan đến quá tải của toán tử.
Ai là đúng?
Bạn nói đúng. Trong một nghĩa nào đó, nó là công bằng để nói rằng các nhà khai thác xây dựng đã hành động polymorhpically tùy thuộc vào đối số của họ. Đó là tính đa hình tĩnh – sehe
Lưu ý rằng ngoài việc có hai toán tử '*' (nghĩa là "quá tải" theo nghĩa tiếng Anh nhưng không theo nghĩa C++), mã nhị phân dựng sẵn '*' thực sự cũng bị quá tải theo nghĩa C++, trong nó áp dụng cho các kiểu khác nhau - 'int',' double', vv - với các hiệu ứng khác nhau. Bộ quá tải hiệu quả cho mục đích của độ phân giải quá tải của nhà điều hành được xác định trong tiêu chuẩn, tại 13.6/12.Tương tự như vậy '*' có hiệu quả quá tải cho mọi kiểu con trỏ (13.6/6) và kiểu con trỏ hàm (/ 7). –