Khi thông số mutable
được sử dụng trong khai báo thành viên dữ liệu không tĩnh, dữ liệu có thể thay đổi bất kể phần còn lại của đối tượng được coi là const hay không. Với thực tế này, chúng tôi có thể dễ dàng có ấn tượng rằng thông số mutable
là cùng một loại điều như bộ định tính const
, hóa ra là không đúng sự thật. Trên thực tế, ngôn ngữ phân loại các thông số mutable
làm trình chỉ định lớp lưu trữ. Điều này khá trực quan vì mutable
không chỉ định thời lượng lưu trữ.Tại sao trình chỉ định có thể thay đổi được phân loại là bộ định danh lớp lưu trữ, nhưng không phải là một bộ định tính?
Các lý do đằng sau quyết định thiết kế này là gì?
Điều gì sẽ làm cho nó ít hợp lý hơn dường như nếu mutable
là một vòng loại?
Ưu điểm của việc biến nó thành bộ định danh lớp lưu trữ là gì?
Câu hỏi của bạn được trả lời trực tiếp trong [dcl.stc] của N4140: 'Trình định danh có thể tắt trên thành viên dữ liệu lớp vô hiệu hóa một trình chỉ định const được áp dụng cho đối tượng lớp chứa và cho phép sửa đổi thành viên của lớp có thể thay đổi được mặc dù phần còn lại của đối tượng là const (7.1.6.1). ' –
'const' và' volatile' là một phần của kiểu. 'mutable' không phải. –
Việc triển khai được phép đặt đối tượng const vào bộ nhớ chỉ đọc - nhưng không phải là thành viên có thể thay đổi được. Vì vậy, nếu bạn nheo mắt một chút thì nó không hoàn toàn không liên quan đến việc lưu trữ. –