Nó trả về một tham chiếu đến thành viên riêng tư.
Có rất nhiều trường hợp điều này là mong muốn, nhưng cần phải thận trọng.
IMO thường không phải là một ý tưởng tốt để trả lại một bản sao của một đối tượng nội bộ không phải là một loại tích phân, vì lý do hiệu suất tổng thể. Có, tôi biết, tối ưu hóa sớm là không tốt, nhưng điều này không thực sự tối ưu hóa, nó chỉ là một thực hành hiệu suất tốt cho phép người gọi để xác định các tác động hiệu suất; nếu nó muốn có một bản sao, nó có thể không khai báo biến mà nó gán nó làm tham chiếu.
Có 2 quy tắc chung của ngón tay cái tôi sử dụng ở đây:
1) Nếu bạn không muốn người gọi để có thể sửa đổi các đối tượng cá nhân trực tiếp, kê khai giá trị trả về là một tham chiếu const:
inline const string& GetLabel() const{ return m_Label; }
2) Người gọi không bao giờ lưu trữ tham chiếu được trả về từ phương thức lớp, chỉ nên sử dụng cục bộ ở nơi đối tượng cha được bảo đảm nằm trong phạm vi.
Nếu vì một số lý do bạn cần người gọi để có thể lưu trữ một tham chiếu đến các đối tượng bên trong của bạn, hãy sử dụng con trỏ thông minh để thay thế.
Thật vậy, bạn có thể muốn _both_ các phiên bản const và không const. – ildjarn
@ildjam Điều đó chỉ đúng một phần. Thông thường, bạn sẽ chỉ muốn cung cấp phiên bản const, trừ khi bạn có lý do muốn cho phép người gọi trực tiếp sửa đổi đối tượng. Nếu bạn cung cấp phiên bản không phải const, thì bạn cũng nên cung cấp phiên bản const, để bạn vẫn có thể truy cập chỉ đọc trong đó bạn có tham chiếu const đến đối tượng cha. – Gerald
@Gerald: Xin lỗi, tôi nên làm rõ - ý tôi là, nếu bạn muốn phiên bản không const trả về một tham chiếu, thì bạn gần như chắc chắn cũng muốn có một phiên bản const. – ildjarn