Tại sao ủy ban C++ quyết định rằng tham chiếu const nên kéo dài tuổi thọ của thời gian?Tại sao tham chiếu const kéo dài tuổi thọ của các giá trị?
Thực tế này đã được thảo luận rộng rãi trực tuyến, kể cả ở đây trên stackoverflow. Tài nguyên được dứt khoát giải thích rằng đây là trường hợp có lẽ là GoTW này:
GotW #88: A Candidate For the “Most Important const”
lý do cho tính năng ngôn ngữ này là gì? Có biết không?
(Việc thay thế sẽ được rằng tuổi thọ của temporaries không được gia hạn bởi bất kỳ tài liệu tham khảo.)
My own lý thuyết vật nuôi cho các lý do là rằng hành vi này cho phép các đối tượng ẩn chi tiết thực hiện. Với quy tắc này, một hàm thành viên có thể chuyển đổi giữa trả về một giá trị hoặc một tham chiếu const tới một giá trị đã tồn tại bên trong mà không có bất kỳ thay đổi nào đối với mã máy khách. Ví dụ, một lớp ma trận có thể trả về các vectơ hàng và vectơ cột. Để giảm thiểu các bản sao, một hoặc cái khác có thể được trả lại dưới dạng tham chiếu tùy thuộc vào việc triển khai (hàng chính so với cột chính). Bất kỳ cái nào không thể được trả lại bằng cách tham chiếu phải được trả lại bằng cách tạo một bản sao và trả về giá trị đó (nếu các vectơ trả về là liền kề). Các nhà văn thư viện có thể muốn mất nhiều thời gian để thay đổi việc thực hiện trong tương lai (hàng chính vs cột chính) và ngăn chặn khách hàng viết mã mà phụ thuộc mạnh mẽ vào việc thực hiện là hàng chính hoặc cột lớn. Bằng cách yêu cầu khách hàng chấp nhận các giá trị trả về như const ref, lớp ma trận có thể trả về một trong hai tham số const hoặc các giá trị mà không có bất kỳ thay đổi nào đối với mã máy khách. Bất kể, nếu lý do ban đầu được biết, tôi muốn biết điều đó.
Ví dụ về ma trận sẽ được giải quyết thanh lịch hơn bằng cách sử dụng đối tượng proxy. – 5gon12eder
Bạn sẽ phải kiểm tra "Design & Evolution of C++" cho câu trả lời cuối cùng. Nhưng tôi mạnh mẽ nghi ngờ rằng câu hỏi này có một câu trả lời khách quan - lý thuyết vật nuôi cá nhân không quan trọng. – MSalters
@ 5gon12eder Tôi nghĩ rằng những gì bạn đang đề xuất là giải pháp tôi đã cố gắng để empt trước bằng cách quy định rằng các vector trả về phải được tiếp giáp (vì lý do gì ...). – Praxeolitic