عضو ثابت (const) یعنی اینکه باید در زمان-کامپایل مقدار دهی بشن . نه در زمان-اجرا . و در Data Segment ذخیره میشن و فقط-خواندنی هستند .
وقتی که شما یک شی از یک کلاس درست میکنید ( میتونید توی هر قسمت این شی رو درست کنید : توی Stack یا Heap یا Global یا ...)
هم میتونید زمان-کامپایل بهش مقدار بدید و هم زمان-اجرا . ولی اگه این شی عضو ثابت داشته باشه و static نباشه برای هر شی یک دونه از این عضو درست میشه . حالا شاید شما این شی رو در هر جایی درست کنی . و چون ثابت ها در Data Segment ذخیره میشن و از طرفی شی شما بدلیل داشتن نوع انتخاب میتونه توی خیلی جاها ذخیره بشه همچین کاری رو کامپیالر اجازه نمیده . بدلیل اینکه این ۲ تا با هم همخونی ندارن . پس اون رو بصورت static تعریف میکنید که برای همه ی اشیا مشترک باشه و حتما هم باید زمان-کامپایل بهش مقدار بدید تا کامپایلر اون رو در Segment مناسب ذخیره کنه .