C++对C语言的增强
1.全局变量检测增强
2.函数检测增强,参数类型增强,返回值检测增强,函数调用参数检测增强
3.类型转换检测增强
4.struct增强
C语言使用必须加入struct关键字,C++可以不加
struct Person{
int m_Age;
void plusAge(){ m_Age++; }
}
void test04(){
Person p1;
p1.m_Age=10;
p1.plusAge();
cout<<p1.m_Age<<endl;//输出后为11
}
5.bool类型增强
C语言中没有boll类型 sizeof(bool)=1
bool非零就是1
6.三目运算符增强
a=10,b=20;
a>b?a:b=100;//b=100
若C语言中想实现C++的写法:
*(a>b?&a:&b)=100;
printf("a=%d,b=%d\n",a,b);
7.const增强
C语言中修改const变量(用指针):
const int m_A=10;//全局只读区受到保护不可修改
void test07(){
const int m_B=20;//伪常量,非真正常量
int *p=(int *)&m_B;
*p=200;
printf("*p=%d,m_B=%d\n",*p,m_B);//200,200
int arr[m_B];//不可以初始化
}
下面看C++中:
const int m_A=10;//全局只读区受到保护不可修改
void test07(){
const int m_B=20;//真正的常量
int *p=(int *)&m_B;
*p=200;
cout<<"*p="<<*p<<",m_B="<<m_B<<endl;//200,20
int arr[m_B];//可以初始化
}
解释:
C语言中const修饰的变量是伪常量,编译器会分配内存
C++中不会分配内存,const int m_B=20;放符号表中
int *p=(int *)&m_B;
*p=200;
编译器会临时开辟一块内存空间
int tmp=m_B;//tmp有内存
int *p=(int *)&tmp;//*p指向的是临时那块空间
临时空间看不到