Ok Tôi có vấn đề này và tôi không thể tìm thấy một câu trả lời tốt vì vậy tôi sẽ chia sẻ những gì tôi đã học được.
Bạn có thể vượt qua theo giá trị không có gì sai với điều đó. (như bạn đã trình bày trong câu hỏi của mình.)
Nhưng lý do chúng tôi chuyển tham số bằng tham chiếu const là vì vậy hàm không tạo bản sao thực của giá trị được gọi. giá trị bất cứ nơi nào nó có trong bộ nhớ.
Điều này tiết kiệm thời gian xử lý đặc biệt là nếu một thứ gì đó to lớn có hàng nghìn tên ... Trong trường hợp này, thời gian được lưu sẽ hầu như không có gì.
Và đối với const, đảm bảo người dùng của hàm mà giá trị tham chiếu sẽ không bị thay đổi vì nó có thể được thay đổi vì bạn có quyền truy cập vào vị trí ban đầu trong bộ nhớ vì nó được chuyển theo tham chiếu .. Nếu định nghĩa hàm của bạn thực sự thay đổi giá trị của tham số được gọi trong tham chiếu const, nó sẽ là một lỗi trình biên dịch, nó sẽ không cho phép bạn làm điều đó. bởi vì khi bạn đặt const, bạn đang nói cho trình biên dịch giá trị này không thể thay đổi được.
Cảm ơn, James! Đối với toán tử gán bản sao, có loại lớp nào không sao chép được không? Tôi nghĩ rằng tất cả các loại lớp ít nhất có một constructor sao chép mặc định? – Tim
@Tim: Chắc chắn: nếu bạn có một trình tạo bản sao _private_ do người dùng khai báo cho một lớp, thì hàm tạo bản sao sẽ không thể truy cập được (trừ khi bạn đang ở trong một hàm thành viên hoặc bạn của lớp đó) và lớp đó sẽ không được sao chép. Nếu bạn khai báo hàm tạo bản sao nhưng không xác định nó, thì lớp không phải là bản sao có thể xây dựng được (và cố gắng sao chép-xây dựng một cá thể sẽ gây ra các lỗi trình liên kết). Cả hai kỹ thuật này đều được sử dụng (thường là cùng nhau) để gây ra một lớp không được sao chép. –
Cảm ơn! Tôi tự hỏi trong trường hợp nào một lớp học không thể sao chép được là muốn? – Tim