6.6.9 Giá trị trả về của hàm là hằng số

* Bất kỳ hàm nào cũng có thể được khai báo với giá trị trả về của nó là const. Nó không có nhiều ý nghĩa khi áp dụng cho các giá trị của các kiểu dữ liệu tiêu chuẩn (như int hoặc float), nhưng có thể cần thiết khi được sử dụng với các con trỏ, tập hợp và các đối tượng.

Các tuyên bố như thế có nghĩa là: “Tôi sẽ cho bạn một giá trị mà bạn không được phép thay đổi nó”.

Giá trị trả về sẽ nằm trong vùng bộ nhớ chỉ đọc. Các chuỗi ký tự kiểu C (C-style) thường được lưu trữ trong vùng bộ nhớ mà không được phép ghi vào.

Ví dụ, chương trình sau sẽ gây ra thảm họa (chết chương trình):

* Có một câu hỏi đặt ra: Hàm nào trong số các hàm sau có thể lấy biến str như một tham số và đảm bảo rằng thảm họa sẽ không xảy ra ?

Câu trả là: chỉ có hàm thứ ba (tên là f3) đảm bảo rằng nó sẽ không sửa đổi dữ liệu được trỏ bởi tham số. Do đó nó có thể sử dụng str làm tham số và đảm bảo rằng không có thảm họa xảy ra.

* Hãy xem đoạn code sau →

Hàm fun trả về một con trỏ tới chuỗi ký tự C-style. Chúng ta đã biết rằng chuỗi này là không thể thay đổi, vì vậy chúng tôi nhấn mạnh thực tế này thông qua hình thức khai báo của hàm. Kết quả trả về của hàm chỉ có thể được gán cho một biến bảo đảm an toàn.

Dòng code sau sẽ bị trình biên dịch từ chối:

Còn dòng code như sau sẽ được chấp nhận: