Although usually I don't recommend using macros in C++ code, there are a few exceptions. One such exception is when you want to create a truly immutable constant. Consider the following constant:
const int MAX=512;
Seemingly, MAX's value can't be changed because it's const. However, on some platforms, a brute-force cast can change its value. For example:
int *p = const_cast (&MAX); // remove constness
*p= 100; // attempt to change MAX through a pointer
Although any attempt to change a const object causes undefined behavior according to the C++ standard, some compilers let this hack pass unnoticed. To disable such possible hacks altogether, you can use a macro instead of a const object:
#define MAX 512
This time, MAX can't be changed.