Câu hỏi của bạn ở dạng C++, không theo thuật ngữ thiết kế. C++ hỗ trợ mọi thứ theo cách vì nó có ý nghĩa về mặt thiết kế. C++ cho phép bạn làm rất nhiều thứ, nhưng nếu bạn muốn tạo ra phần mềm tốt với nó, bạn không thể chỉ tuân thủ các quy tắc C++ theo nghĩa đen, bạn cần phải đi xa hơn. Trong thực tế điều đó có nghĩa là bạn kết thúc việc đưa ra các quy tắc của riêng bạn.
Trong trường hợp của bạn - tốt, tôi sẽ không bao giờ tạo biến thể tham chiếu nếu tôi không thực sự thay đổi biến trong hàm.
Nếu bạn áp dụng 'quy tắc' cho chính mình, thì bạn ngay lập tức thấy lý do tại sao chức năng ref không ràng buộc: điểm đầu tiên, để thay đổi hằng số lỏng lẻo là gì?
Nếu bạn thực hiện đúng quy tắc, bạn sẽ thấy chúng được C++ hỗ trợ đẹp mắt. Giống như ... function thay đổi một đối tượng: pass non-const ref. Không thay đổi? const ref. Không bắt buộc? con trỏ const. Tiếp quản quản lý mem? con trỏ không const.
Lưu ý rằng đó chỉ là khởi đầu, đặc biệt khi đa luồng phát ra. Bạn phải thêm mọi thứ vào 'hợp đồng' của hàm. Ví dụ cho const ref: phải đối tượng ở lại 'còn sống' sau khi cuộc gọi? Đối tượng có thể thay đổi trong suốt cuộc gọi không? Và kể từ đó trở đi.
Nguồn
2015-02-07 14:16:38
_ "Làm cách nào để gọi foo2 vượt qua tham số tham chiếu?" _ Cung cấp cho nó tham chiếu? –
[Trình biên dịch sẽ phàn nàn về sự mơ hồ] (http://ideone.com/W5eLdq) nếu bạn đang cố gắng sử dụng cuộc gọi không rõ ràng. –
Cảm ơn tất cả, vấn đề được giải quyết – kchpchan