c++中const和c中const区别

#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。。。。。。。
    }

}

 

posted @ 2019-08-04 20:20  白伟碧一些小心得  阅读(567)  评论(0编辑  收藏  举报