הגדרת משתנה או פרמטר כקבוע הוא כלי חזק מאין כמוהו למניעת באגים בזמן קומפילציה לפני שמגיעים לזמן הריצה. למה הכוונה?
בואו ניקח דוגמא, השגרה הבאה מקבלת את מספר התאים במערך שעליה לסכום (פרמטר in)ומחזירה את סכומם (ערך החזר):
int SummarizeCells(int NumOfCells)
{
int SumOfCells = 0;
for (int i = 0; i <= NumOfCells; i++)
{
NumOfCells += m_NumArr[i];
}
return SumOfCells;
}
שימו לב לבאג הקטן של התוכניתן שלנו: במקום לסכום אל תוך המשתנה SumOfCells, התבצעה הסכימה אל תוך NumOfCells והתוכנית תשתגע מאוד מהר...
אז בואו קודם כל נניח שבאגים כאלו קורים לכולנו ואלה החיים.
אז מה עושים?
מגדירים את השגרה כך:
int SummarizeCells(int const NumOfCells)
מה הרווחנו? במקום שנצטרך לדבג את התוכנית בזמן ריצה ולחפש איפה הבאג, כבר בזמן ההידור נקבל שגיאה. למה? כי ניסינו להכניס ערך לתוך משתנה קבוע.
אותו עיקרון עובד בשגרות const במחלקות:
double CEmployee::GetAnnualSalary() const