Tôi đã tạo một lớp với hai phương thức get, một const và một non-const. Phương thức const là công khai, do đó người dùng có thể truy vấn vectơ. Phương pháp non-const được bảo vệ, vì vậy tôi có thể sử dụng nó để sửa đổi dữ liệu tôi cần.Tại sao C++ không cast thành const khi phương thức const là public và phương thức non-const được bảo vệ?
Khi tôi cố gắng sử dụng lớp, tuy nhiên, và gọi phương thức get, trình biên dịch phàn nàn rằng phương thức không được bảo vệ. Thay vào đó, tôi phải sử dụng const_cast để đưa đối tượng đến const, vì vậy tôi có thể thay thế phương thức công khai.
Có cách nào để giải quyết vấn đề này không? Tại sao trình biên dịch sẽ không tự tạo bản thân vì có một phương thức công khai? Nếu tôi loại bỏ các phiên bản được bảo vệ và chỉ để lại một const, nó hoạt động tốt, do đó, nó không diễn viên trong tình huống này. Đúc đến const luôn an toàn. Nó loại bỏ constness đó là một vấn đề.