تفاوت const و mutable در C++
تفاوت کلیدی const و mutable در C++
در زبان برنامهنویسی C++، دو کیورد const و mutable نقش مکمل یکدیگر را ایفا میکنند. این دو مفهوم در مدیریت تغییرپذیری دادهها و اشیاء به کار میروند و درک صحیح آنها برای نوشتن کدهای ایمن و بهینه ضروری است.
مفهوم const در C++
کلمه کلیدی const برای تعریف ثبات (constancy) استفاده میشود و به کامپایلر اعلام میکند که مقدار یک متغیر یا شیء پس از تعریف نباید تغییر کند:
- متغیرهای const پس از مقداردهی اولیه غیرقابل تغییر هستند
- متدهای const نمیتوانند اعضای غیر-static کلاس را تغییر دهند
- اشارهگرهای const به دادهای اشاره میکنند که از طریق آن اشارهگر قابل تغییر نیست
مثال:
const int MAX_VALUE = 100;
MAX_VALUE = 200; // خطای کامپایلر - تغییر مقدار const مجاز نیست
const int MAX_VALUE = 100;
MAX_VALUE = 200; // خطای کامپایلر - تغییر مقدار const مجاز نیست
کاربرد mutable در C++
در مقابل، mutable یک کیورد خاص است که اعضای کلاس را حتی در متدهای const قابل تغییر میکند. این ویژگی برای مواردی طراحی شده که از نظر منطقی جزء وضعیت شیء محسوب نمیشوند اما نیاز به تغییر دارند:
- حالت کش (caching) یا ذخیرهسازی موقت نتایج
- ردیابی دسترسی به متدها (logging)
- قفلهای موقت در برنامهنویسی چندنخی
ویژگی | const | mutable |
---|---|---|
تغییرپذیری | غیرقابل تغییر | قابل تغییر حتی در متدهای const |
حوزه کاربرد | متغیرها، متدها، پارامترها | فقط اعضای کلاس |
مثال عملی از ترکیب const و mutable
در این مثال یک کلاس با عضو mutable تعریف شده که حتی در متد const قابل تغییر است:
class CacheExample {
mutable int cacheValue;
int calculate() const {
cacheValue = 42; // قابل تغییر با وجود mutable
return cacheValue;
}
};
mutable int cacheValue;
int calculate() const {
cacheValue = 42; // قابل تغییر با وجود mutable
return cacheValue;
}
};
برای یادگیری بیشتر درباره انواع متغیرها در C++ میتوانید اینجا را دنبال نمایید.
نکات کلیدی در استفاده از const و mutable
- استفاده از const باعث بهبود خوانایی و ایمنی کد میشود
- mutable باید فقط برای اعضایی استفاده شود که وضعیت منطقی شیء را تغییر نمیدهند
- اشیا const فقط میتوانند متدهای const را فراخوانی کنند
- ترکیب const و mutable نیاز به دقت طراحی دارد تا از نقض اصول شیءگرایی جلوگیری شود
استفاده هوشمندانه از const و mutable میتواند هم ایمنی نوع (type safety) را افزایش دهد و هم انعطافپذیری لازم را در طراحی کلاسها فراهم کند.