我是靠谱客的博主 漂亮书包,最近开发中收集的这篇文章主要介绍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

      (1)对const修饰变量的修改的区别

1)、
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 = %dn", m_B);

	//int arr[m_B]; //m_B不可以初始化数组

}

//C++中全局const修饰变量和C语言下是一样的,const修饰局部的变量也不可以间接修改(可以运行),因为变量放入到符号表中,实际上修改的是个中间变量

2)、链接属性
//const在C语言下,默认是外部链接属性,不必须手动添加 extern关键字
//const在C++语言下,默认是内部链接属性,必须手动添加 extern关键字 ,提高作用域
extern const int m_A = 10000;
 

  iii、const分配内存的情况

//1、对const修饰的变量取地址时候,会分配临时内存
void test01()
{
	const int m_A = 10;
	int * p = (int*)&m_A;
}

//2、const前加入 extern 关键字后,也会分配内存

//3、使用 变量 来初始化const修饰的变量
void test02()
{
	int a = 10;
	const int m_A = a;

	int *p = (int *) &m_A;

	*p = 20;
	cout << m_A << endl;

}

//4、对于自定义数据类型 ,也会分配内存
struct Person
{
	string name;
	int age;
};
void test03()
{
	const Person p;
	//不可以直接修改
	//p.age = 100;
	//p.name = "aaa";

	Person * pp = (Person *)&p;

	pp->name = "aaa";
	pp->age = 10;

	cout << "姓名: " << pp->name << " 年龄: " << pp->age << endl;


}

iiii、尽量以const替换#define

const和#define的区别总结:
1、const有类型,可进行编译器类型安全检查,#define无类型,不可进行编译器类型安全检查

2、const有作用域,而#define不重视作用域,默认定义处到文件末尾,如果定义在指定作用域下有效的常量,那么#define就不能用

void func1(){
    const int a = 10;
    #define A 20
    //#undef A //卸载宏常量
}

void func2(){
    //cout << "a:" << a << endl;//不可访问,超出了const int a 的作用域
    cout << "A:" << A << endl;//#define 作用域从定义到文件结束或者到#undef,都可访问
}

int main(){
    func2();
    return EXIT_SUCCESS;
}

 

最后

以上就是漂亮书包为你收集整理的C++学习(二)之using的用法和C++对C语言的增强内容的全部内容,希望文章能够帮你解决C++学习(二)之using的用法和C++对C语言的增强内容所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部