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;
}
文章目录