1、using的使用
1)using声明
》如果出现就近原则,需要避免两个原则同时出现;
2)using编译指令
》如果出现就近原则,优先使用就近原则
》如果有“多个房间打开”,并且存在同名的变量,使用时候需要加作用域区分
namespace kingGlory
{
int sunwukongid = 1;
}
void test01(){
//1、using声明
//要避免就近原则和using同时出现
using kingGlory::sunwukongid;
cout << "sunwukongid = " << sunwukongid << endl;
}
namespace LOL
{
int sunwukongid = 3;
}
void test02()
{
//int sunwukongid = 2;
//2、using编译指令
//如果using编译指令存在多个并且有同名出现,需要加作用域区分 例如kingGlory和LOL
using namespace kingGlory;
using namespace LOL;
//如果有就近原则出现,那么优先选择使用就近原则
cout << "sunwukongid = " << sunwukongid << endl;
}
2、C++对C语言增强
1)全局变量检测的增强 :C不能检测变量重复定义;
//1、全局变量检测增强 C中可以运行,C++会报错
int a;
int a = 10;
2)函数检测增强: C语言对函数有无返回值和有无形参类型、有返回值类型但是函数没有返回数值、调用函数传参个数和函数定义参数个数不同都是没有检测的,都是可以编译通过的,C++中不可以;
3)类型转换检测增强
//malloc(64)返回值void*
//C语言中不需要强转就可以使用
char * p = malloc(64);
//C++语言需要强转才可以编译通过
char * p = (char *)malloc(64);
4)对struct结构体的增强:C++语言下结构体中可以放函数,但C中不可以,C中可以放函数指针,并且在使用上也有优化,C语言下声明结构体的变量的时候必须加struct关键字,C++语言下声明结构体变量的时候可以不加struct;
struct Person
{
int age;
//void func(); C语言下结构体中不可以放函数,C++可以
};
5)bool类型增强:C语言下没有bool类型
6)三目运算符增强:C语言下三目运算符返回的是值,C++语言下三目运算符返回的是变量,
int a = 10;
int b = 20;
//C中报错相当于20=100,C++可行相当于b=100
a > b ? a : b = 100;
7)const
C语言下:
//全局const修饰变量 受到常量区保护,语法通过,运行阶段会报错
const int m_A = 100;
void test07()
{
//m_A = 200;
//int * p = &m_A;
//*p = 200;
const int m_B = 100; //const修饰局部的变量可以间接修改成功
//m_B = 200; //直接修改也是不允许的
int * p2 = &m_B; //间接修改可以
*p2 = 200;
printf("m_B = %d\n", m_B);
//int arr[m_B]; //m_B不可以初始化数组
}
//C++中全局const修饰变量和C语言下是一样的,const修饰局部的变量也不可以间接修改(可以运行),因为变量放入到符号表中,实际上修改的是个中间变量