C++’s mutable and conceptual constness
Bài viết dưới đây được dịch từ http://www.highprogrammer.com/alan/rants/mutable.html – một tham luận sâu sắc giúp chúng ta hiểu chính xác về mutable.
Ở đầu bài viết tác giả đưa ra một “suy nghĩ” sai của một site nổi tiếng about.com
Trích từ about.com
“Từ khóa mutable được sử dụng để cho phép một data member nào đó của một const object có thể thay đổi được. Nó đặc biệt hữu ích nếu hầu hết member là constant nhưng một số ít có thể được thay đổi. Giả sử chúng ta thêm một “salary” member vào lớp Employee của chúng ta. Khi mà tên và ID có thể là const thì salary không nên là const. Và đây là lớp Employee: (more…)
[C++] Const and mutable members
Chúng ta sẽ bắt đầu bằng cách lược qua lại một vài khái niệm cơ bản của C++.
1. Const member function
class Date
{
int d, m, y;
public:
int day() const { return d; }
int month() const { return m; }
int year() const { return y; }
// …
};
Những member function của class này là const. Điều đó có nghĩa là những function đó không được thay đổi lớp đó. Ví dụ trong hàm year() bạn làm như sau sẽ gây ra lỗi biên dịch
inline int year() const
{
return y++; // error: attempt to change member value in const function
}
Một const member function có thể được thực hiện bởi cả non-const hay const object, trong khi một non-const member function chỉ có thể thực hiện bởi non-const object.
void f( Date &d, const Date& cd )
{
int i = d.year(); // ok
d.add_year(1); // ok
int j = cd.year(); // ok
cd.add_year(1); // error: can not change value of const cd
}
leave a comment