const增强
-
c语言中const是伪常量,可以通过指针修改
-
c++中const会放到符号表中
-
c语言中const默认是外部连接,c++中const默认是内部链接
#include<iostream> using namespace std;const int m_a = 10; //在全局区域里,受到保护,不可以被更改 /*c语言中,const修饰的变量,是伪常量,编译器是会分配内存的、c++中,const不会分配内存,const int m_B=20;*/void test07(){//m_a = 100; 不允许被修改const int m_B = 20;//m_B = 100; 不允许被修改int *p = (int *)&m_B;//*p指向的是临时的那块空间,临时空间看不到,临时的空间被更改,但m_B没有被改*p = 200;printf("*p=%d,m_B=%d\n", *p, m_B);//c中*p 和m_B都是200//c++中m_B为20,没有被更改} int main(){test07();system("pause");}
const分配内存情况
-
对变量取地址,会分配临时内存
-
extern关键字下的const会分配内存
-
用普通变量初始化cosnt变量
-
自定义数据类型会分配内存
#include<iostream>#include<string>using namespace std;//1.const分配内存,取地址会分配临时内存//2.extern 编译器也会给const 变量分配内存void test01(){const int m_A = 10;int *p = (int *)&m_A;//会分配临时内存}//3.用变量初始化const的变量void test02(){int a = 10;const int b = a;//会分配内存int *p = (int *)&b;*p = 1000;cout << "b= " << b << endl;}//4.自定义数据类型 加const也会分配内存struct Person{string m_Name; //姓名int m_Age;};void test03(){const Person p1;//p1 m_Name = "aaa";Person *p = (Person*)&p1;p->m_Name = "德玛西亚";(*p).m_Age = 18;cout << "姓名 " << p1.m_Name << "年龄 " << p1.m_Age << endl;}int main(){test03();system("pause");return 0;}