Tại sao sau đây không được phép trong C++?
Lý do rất giống với trình biên dịch cung cấp cho bạn dưới dạng lỗi biên dịch:
Vì chúng không rõ ràng!
Tại sao những phương pháp này không rõ ràng?
Câu trả lời ngắn gọn: Bởi vì tiêu chuẩn C++ nói như vậy.
Lý do cơ bản đằng sau các phương thức quá tải này không rõ ràng là gì?
Trình biên dịch không biết liệu người gọi muốn để điều trị các giá trị của truyền lập luận như một const
hay không, không có cách nào cho trình biên dịch để xác định rằng với những thông tin trong tầm tay.
Lưu ý nhấn mạnh vào chuyển giá trị vào đây, đối số đang được chuyển theo giá trị và do đó sự mơ hồ. Nếu đối số là được chuyển bởi tham chiếu thì trình biên dịch biết chắc chắn cách người gọi muốn xử lý đối số vì sau đó đối tượng thực tế đang được truyền và do đó trình biên dịch có thể thực hiện lựa chọn quá tải thích hợp.
Ví dụ sau cung cấp ý tưởng rõ ràng hơn cho giải thích ở trên.
Online Sample:
class Sample
{
public:
void Method(char &x){}
void Method(char const x){}
void Method(char const &x){}
};
int main()
{
Sample s;
return 0;
}
Nguồn
2012-05-14 11:45:03
mối liên hệ giữa câu hỏi ban đầu của bạn và chỉnh sửa của bạn là gì? Hai câu hỏi dường như không liên quan. –
Tôi đã xóa nó. – Avinash