Tôi sẽ nói chuyện với C ++, nơi sự khác biệt này có liên quan nhất.
Như bạn lưu ý chính xác, bất biến có nghĩa là một đối tượng không thể thay đổi hoàn toàn sau khi tạo. Tất nhiên việc tạo này có thể xảy ra trong thời gian chạy, tức là, một const
đối tượng không nhất thiết là hằng số thời gian biên dịch. Trong C ++, một đối tượng là bất biến nếu (1) và (2) hoặc (3) được đáp ứng:
Nó không có thành viên nào được tuyên bố mutable
là bị đột biến bởi const
các chức năng thành viên
Nó được tuyên bố const
const
các chức năng thành viên không sử dụng const_cast
để loại bỏ trình const
độ chuyên môn để đột biến bất kỳ thành viên nào
Tuy nhiên, bạn cũng có thể xem xét các công cụ sửa đổi truy cập: nếu một hoạt động bên trong đột biến một thể hiện, nhưng không có tác dụng gì đối với trạng thái của cá thể có thể quan sát được thông qua giao diện công khai của nó, thì đối tượng đó là logic bất biến logic.
Vì vậy, C ++ cung cấp các công cụ cần thiết để tạo các đối tượng bất biến, nhưng giống như hầu hết mọi thứ trong C ++, các công cụ này chỉ đủ tối thiểu và đòi hỏi sự siêng năng để thực sự sử dụng. Trạng thái của một cá thể không nhất thiết bị giới hạn trong các biến thành viên thể hiện vì vì C ++ không cung cấp một cách để thực thi tính minh bạch tham chiếu, nó cũng có thể bao gồm cả trạng thái toàn cầu hoặc lớp.
const
cũng có một chức năng khác trong C ++: để đủ điều kiện tham khảo và con trỏ. Một const
tài liệu tham khảo có thể đề cập đến một const
đối tượng không . Việc sử dụng const_cast
để đột biến một đối tượng thông qua một const
tham chiếu là hợp pháp (mặc dù không cần thiết hoặc được khuyến khích) nếu và chỉ khi đối tượng đó được tuyên bố là không const
:
int i = 4; // Non-const object.
const int* p = &i; // const pointer.
*const_cast<int*>(p) = 5; // Legal.
Và tất nhiên đó là hành vi không xác định để làm biến đổi một const
đối tượng:
const int i = 4; // const object.
const int* p = &i; // const pointer.
*const_cast<int*>(p) = 5; // Illegal.
const
không tồn tại trong mọi ngôn ngữ, và tính biến đổi và bất biến không tồn tại trong mọi ngôn ngữ nên việc sử dụng ngôn ngữ này không được áp dụng. Đây là ngôn ngữ cụ thể chỉ khi áp dụng các khái niệm này.