const表示常量 这是一个语言层面的约束 它只是表示值不可变 你可以用const_cast转换掉const约束
如果是局部变量的话,const变量可能被优化掉(比如变成立即数),所以内存里可能没有它的位置(也就是所谓的在代码段里)
在语言层面讨论具体编译器实现=耍流氓
constexpr表示编译期可以计算出的常量,比如
constexpr int give_me_five(){
    return 5;
}
然后你就可以int arr[give_me_five()];
#define FIVE 5出来的是宏,在预处理器阶段就替换掉了,和你直接写个字面值5没区别