C++学习(二)之using的用法和C++对C语言的增强内容

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修饰局部的变量也不可以间接修改(可以运行),因为变量放入到符号表中,实际上修改的是个中间变量
发布了27 篇原创文章 · 获赞 25 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/weixin_38293850/article/details/105591304