Vietnamese Developers’ Blog

C++’s mutable and conceptual constness

Posted in C/C++ by Hoang Tran on September 17, 2007

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

Posted in C/C++ by Hoang Tran on September 17, 2007

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
}

(more…)