#include <algorithm>
#include <iostream>
#include <functional>
#include <vector>
#include <numeric>
#include <array>
#include <cstring>
#include <cstdio>
#include <functional>//包装头文件
using namespace std;
#if 0
//在C语言中
int main()
{
const int num = 100;
//int a[num];//错误,num其实是个伪常量
*(int*)&num = 4;
printf("%d",num);//4,C语言,const不是真正意义上的常量,只能避免直接修改,无法避免间接修改
getchar();
}
#endif
//在c++中
int main1()
{
//const int n = 20;
//int a[n];//可以,因为c++编译器会做自动优化,发现n的地方都会直接替换成10,而不去内存中取
int a = 10;
const int n = a;//const仍然是伪常量,但是只是c++编译器会做优化,但是这儿是变量,
int data[n];//不可以.c++编译器不敢乱优化,因为变量可能发生变化
}
void main3()
{
const int num= 20;
*(int*)(&num) = 3;
cout << *(&num)<< endl;//优化,强行替换,不从内存中取,而直接从寄存器取20
cout << num << endl;//20
}
void main4()
{
int a = 10;
const int num = a;//不敢直接优化
*(int*)(&num) = 3;
cout << *(&num) << endl;//直接从内存中取10,变量不敢直接优化
cout << num << endl;
}
void main()
{
const int num[5]{1, 2, 3, 4, 5};
const int *p = num;
*(int*)p = 100;//但是*p=10,指向常量的指针,不能修改
//const 数值没有优化,可以间接改变
for (auto i:num)
{
cout << i << endl;//100。。。。。。。
}
}