• 【C++】基础篇


    在你学习C++之前,不妨先来学学C++基础。

     一.命名空间

    在刚学习C++的小伙伴会发现,在敲代码之前都要在前面加上 using namespace std; 

    这到底是为什么呢,其实这个过程就是在使用std这个命名空间,因为C++库里面的东西全是包含在std这个命名空间中的,如果我们想要使用C++库里面的东西,就是用到std这个命名空间。

    1.命名空间的使用

    命名空间的使用有 三种方法。

    ①.全部引用

    直接在全局引用std库。这种方法可以直接将C++库里面的东西全用上,以后在想用C++库时,不在需要特定的引用。但同时可能会带来麻烦,如果我们自己定义的变量库冲突时,可能会出现问题。

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. cout << "hello world" << endl;
    6. return 0;
    7. }
    ②.全局单独引用

    当我们需要频繁使用时,在单独的引用出来。

    1. #include
    2. using std::cout;
    3. using std::endl;
    4. int main()
    5. {
    6. cout << "hello world" << endl;
    7. return 0;
    8. }
    ③.单独引用

    在使用时,在单独引用出来。

    1. #include
    2. int main()
    3. {
    4. std::cout << "hello world" << std::endl;
    5. return 0;
    6. }

    2.命名空间的定义

    同样的,我们也可以定义自己的命名空间。 

    1. #include
    2. using namespace std;
    3. namespace calculator
    4. {
    5. int a = 10;
    6. int Add(int x, int y)
    7. {
    8. return x + y;
    9. }
    10. }
    11. using namespace calculator;
    12. int main()
    13. {
    14. int sum = Add(10, 20);
    15. cout << sum << " " << a << endl;
    16. return 0;
    17. }

    如上所示,calculator就是我们自己定义的命名空间。 

     二.缺省参数

    缺省参数就是函数在声明和定义的时候可以为函数缺省一些参数,其中可分为全缺省半缺省。

    1.全缺省参数

    函数在声明和定义的时候全部参数都缺省 

    1. #include
    2. using namespace std;
    3. int Add(int x = 0, int y = 0, int z = 0)//缺省了x,y,z
    4. {
    5. return x + y + z;
    6. }
    7. int main()
    8. {
    9. int sum = Add();
    10. cout << sum << endl;
    11. int sum1 = Add(1, 3);
    12. cout << sum1 << endl;
    13. return 0;
    14. }

    全缺省参数就函数传参的时候,可以一个都不传,不传的参数会默认使用缺省的参数。 

    2.半缺省参数

    函数在声明的定义的时候只缺省部分参数。 

    1. #include
    2. using namespace std;
    3. int Add(int x , int y=0, int z=0)
    4. {
    5. return x + y + z;
    6. }
    7. int main()
    8. {
    9. int sum = Add(10, 2);
    10. cout << sum << endl;
    11. return 0;
    12. }

    重点!!!

    对于半缺省参数,函数的参数只能从右往左缺省,不能从左往右缺省。

    1. int Add(int x=0 , int y, int z)
    2. {
    3. return x + y + z;
    4. }

     上面这种写法时错误的。

    同时,在进行函数传参的时候,参数只能从左往右依次传,不能中间空位置。

    	int sum = Add(10, , 3);

    上面这种写法时错误的。

    三.函数重载

    函数重载,即在同一作用域中,允许函数同名,但是要求同名的函数的参数 要 类型不同or个数不同or顺序不同,返回值不做要求。 

    1. #include
    2. int Add(int x, int y)
    3. {
    4. return x + y;
    5. }
    6. int Add(double x, double y)//类型不同
    7. {
    8. return x + y;
    9. }
    10. int Add(double x, double y, double z)//个数不同
    11. {
    12. return x + y + z;
    13. }
    14. void Add(int i, char a)
    15. {
    16. ;
    17. }
    18. void Add(char a, int i)//顺序不同
    19. {
    20. ;
    21. }
    22. int main()
    23. {
    24. return 0;
    25. }

     四.引用

    引用就是给已存在的变量重新起一个别名

    在上面的代码中,我们先创建了一个变量a,在给变量a起了个别名ra,通过输出他们的地址可以看到,他们其实指的都是同一块空间。 

    引用的特性

    1.引用在定义时必须初始化

    2.一个变量可以有多个引用

    3.一个引用一旦引用了一个实体,就不能引用其他实体 


    注意!!! 

    1. #include
    2. int main()
    3. {
    4. const int a = 10;
    5. int& ra = a;//编译不能通过,因为const 修饰的变量a只能读不能写,而ra可读可写,权限放大了
    6. const int b = 20;
    7. const int& rb = 20;//编译能通过
    8. int c = 30;
    9. const int& rc = c;//编译能通过,因为c可读可写,rc只可读,权限缩小
    10. //总结,权限可以缩小,但不能放大
    11. return 0;
    12. }

    隐式转换

    1. #include
    2. int main()
    3. {
    4. int i = 0;
    5. double& bd = i;//编译无法通过
    6. int a = 1;
    7. const double& pa = a;//编译能通过
    8. return 0;
    9. }

    引用的使用场景

     ①.做函数参数
    1. #include
    2. using namespace std;
    3. //C语言交换两个数的写法
    4. void Swap_C(int* p1, int* p2)
    5. {
    6. int tmp = *p1;
    7. *p1 = *p2;
    8. *p2 = tmp;
    9. }
    10. //C++使用引用交换两个数
    11. void Swap_CPP(int& a, int& b)
    12. {
    13. int tmp = a;
    14. a = b;
    15. b = tmp;
    16. }
    17. int main()
    18. {
    19. int x = 10;
    20. int y = 20;
    21. Swap_C(&x, &y);
    22. cout << x << " " << y << endl;
    23. Swap_CPP(x, y);
    24. cout << x << " " << y << endl;
    25. return 0;
    26. }

    两种方法的区别是,一个是开辟两个新的空间来存放x和y的地址,通过地址来找到它们并进行交换

    一个是通过引用的方式,即a就是x的别名,b就是y的别名,也就是说a就是x,b就是y。 

    ②.引用做返回值 

    引用做返回值和普通返回值有什么区别?看下面两段代码的结果。

     

    五.内联函数

    内联函数指,在使用这个函数的时候,不会再建立函数栈帧,而是该函数会在调用的地方进行展开。

    1. #include
    2. using namespace std;
    3. //inline定义内联函数
    4. inline void Swap(int& a, int& b)
    5. {
    6. int tmp = a;
    7. a = b;
    8. b = tmp;
    9. }
    10. int main()
    11. {
    12. int x = 10;
    13. int y = 20;
    14. Swap(x, y);
    15. cout << x << " " << y << endl;
    16. return 0;
    17. }

    内联函数的好处是,再进行函数调用的时候,不会再建立函数栈帧,从而提高代码的效率,

    内联函数是一个以空间换时间的做法,而且当代码太长,或是递归时,不会再展开,取决于编译器。 

  • 相关阅读:
    nvidia drive-agx-orin Driveos NVSIPL框架-内核层理解
    DockerFile构建过程解析
    flask中的应用工厂
    科普一下MTU是什么,如何设置MTU
    Windows中实现将bat或exe文件作为服务_且实现命令行安装、配置、启动、删除服务
    html5自定义属性--------Dataset
    初识猿如意开发工具
    秒杀系统(1)——秒杀功能设计理念
    【HDU No. 2586】 树上距离 How far away ?
    AI数字人软件系统开发框架
  • 原文地址:https://blog.csdn.net/EWIAW_ilove/article/details/136389184