c++ const
参考博客:https://www.cnblogs.com/shijingjing07/p/5569956.html
1.const常量
const int max=100;
全局的const常量不能修改,因为其在只读数据段。
栈区(局部const变量)
...(动态链接库)
堆区(malloc的数据)
静态数据区(全局变量,static变量)
常量数据区(全局const变量)
代码段
#include<bits/stdc++.h>
using namespace std;
volatile const int a = 20;
int main()
{
//a = 90; // 会报编译错误
int* p = (int*)&a;
//*p=10; // 全局的常量在常量数据区,修改会出错
printf("%x\n", p);
cout << *p << endl;
printf("%x\n", &a);
cout << a << endl;
return 0;
}
局部的const常量不能显示的直接修改,但是可以只用指针强制修改。
#include<bits/stdc++.h>
using namespace std;
int main()
{
volatile const int a = 20;
//a = 90; // 直接改会报编译错误,但是下面用强转的指针就可以改,因为变量在栈区,不是在常量数据区
int* p = (int*)&a;
*p = 10;
printf("%x\n", p);
cout << *p << endl;
printf("%x\n", &a);
cout << a << endl;
return 0;
}
2.const常成员变量
const常量只能通过初始化列表的方式进行初始化或者直接指定。
#include<bits/stdc++.h>
using namespace std;
class Test
{
public:
const int a=10;
};
int main()
{
Test t;
//t.a=20;// 会出错
cout<<t.a<<endl;
return 0;
}