Rẽ từ comment này
Mình có search SO thì thấy có hình như mutable const chỉ có thằng C++ mới có.
Mình không chuyên về C++ nên cũng không biết tại sao lại có vụ này. Các bác nào làm C++ giải thích cho mình với nhé.
Rẽ từ comment này
Mình có search SO thì thấy có hình như mutable const chỉ có thằng C++ mới có.
Mình không chuyên về C++ nên cũng không biết tại sao lại có vụ này. Các bác nào làm C++ giải thích cho mình với nhé.
https://en.cppreference.com/w/cpp/language/cv
mutable
này phải xét trong ngữ cảnh một thuộc tính của class tức là nó vẫn có thể thay đổi dù object nó đang const
.
https://youtu.be/XkDEzfpdcSg?t=878 đây nè
14:38 mutable
là để tránh cast bỏ const
ví dụ viết 1 cái Renderer
đơn giản, trong đó có hàm void Renderer::draw() const
. Nhưng mỗi lần draw()
khá lâu nên nếu screen ko có thay đổi gì thì đừng draw lại. Ta có thể thêm biến bool needToRedraw = true
vào Renderer
:
class Renderer {
public:
void draw() const {
if (needToRedraw) {
redraw();
needToRedraw = false; // cần reset needToRedraw lại
}
}
private:
void redraw() const { ... }
private:
bool needToRedraw = true;
};
nhưng lúc này hàm draw()
là hàm nhận const Renderer* this
, ko thay đổi giá trị của needToRedraw
được :V :V chả lẽ ta cần thay đổi draw
thành void draw()
(ko có const) chỉ để thay đổi giá trị biến needToRedraw
này? Đương nhiên là ko vì hàm draw()
ko thay đổi giá trị của Renderer
. Như vậy chúng ta cần const_cast
biến needToRedraw
ở đây :V :V Nhưng nó rất xấu xí. C++ cho phép thêm mutable
vào thế cho cái const_cast
kia:
private:
mutable bool needToRedraw = true;
như vậy void draw() const
vẫn thay đổi giá trị needToRedraw
được mặc dù this
là const Renderer*